discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=9715b6cd7cf9fc06303e8066fa6e405ed257efe4

commit 9715b6cd7cf9fc06303e8066fa6e405ed257efe4
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Wed Mar 16 11:51:19 2016 -0400

    add new wizard page to change default modifiers for global mouse bindings
    
    this is a default feature of enlightenment which is not obvious to all new
    users and, with the default modifier being Alt, may interfere with some
    application behavior. this informs users of the feature's existence and
    allows for easily changing the modifier(s)
---
 src/modules/Makefile_wizard.mk |   6 ++
 src/modules/wizard/page_065.c  | 134 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 140 insertions(+)

diff --git a/src/modules/Makefile_wizard.mk b/src/modules/Makefile_wizard.mk
index c67ff3c..5866902 100644
--- a/src/modules/Makefile_wizard.mk
+++ b/src/modules/Makefile_wizard.mk
@@ -29,6 +29,7 @@ wizardpkg_LTLIBRARIES  = src/modules/wizard/module.la \
                         src/modules/wizard/page_040.la \
                         src/modules/wizard/page_050.la \
                         src/modules/wizard/page_060.la \
+                        src/modules/wizard/page_065.la \
                         src/modules/wizard/page_070.la \
                         src/modules/wizard/page_080.la \
                         src/modules/wizard/page_090.la \
@@ -89,6 +90,11 @@ src_modules_wizard_page_060_la_CPPFLAGS = $(MOD_CPPFLAGS)
 src_modules_wizard_page_060_la_LDFLAGS = $(MOD_LDFLAGS)
 src_modules_wizard_page_060_la_SOURCES = src/modules/wizard/page_060.c
 
+src_modules_wizard_page_065_la_LIBADD = $(MOD_LIBS)
+src_modules_wizard_page_065_la_CPPFLAGS = $(MOD_CPPFLAGS)
+src_modules_wizard_page_065_la_LDFLAGS = $(MOD_LDFLAGS)
+src_modules_wizard_page_065_la_SOURCES = src/modules/wizard/page_065.c
+
 src_modules_wizard_page_070_la_LIBADD = $(MOD_LIBS)
 src_modules_wizard_page_070_la_CPPFLAGS = $(MOD_CPPFLAGS)
 src_modules_wizard_page_070_la_LDFLAGS = $(MOD_LDFLAGS)
diff --git a/src/modules/wizard/page_065.c b/src/modules/wizard/page_065.c
new file mode 100644
index 0000000..7c3456e
--- /dev/null
+++ b/src/modules/wizard/page_065.c
@@ -0,0 +1,134 @@
+/* ask about policy mouse binding modifiers */
+#include "e_wizard.h"
+
+static Eina_Bool shift;
+static Eina_Bool ctrl;
+static Eina_Bool alt;
+static Eina_Bool win;
+static Eina_Bool altgr;
+
+static const char *names[] =
+{
+   "Shift",
+   "Control",
+   "Alt",
+   "Win",
+   "AltGr",
+};
+
+static struct
+{
+   Eina_Bool *val;
+   const char *name;
+} keys[5];
+
+static unsigned int current;
+
+static void
+modifiers_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
+{
+   Eina_Bool *val = data;
+   unsigned long i, binding = 0;
+   Eina_List *l;
+   E_Config_Binding_Mouse *ebm;
+
+   *val = elm_check_state_get(obj);
+   for (i = 0; i < 5; i++)
+     if (*keys[i].val)
+       binding |= (1 << i);
+   if (binding == current) return;
+   current = binding;
+   EINA_LIST_FOREACH(e_bindings->mouse_bindings, l, ebm)
+     if (eina_streq(ebm->action, "window_move") ||
+         eina_streq(ebm->action, "window_resize") ||
+         eina_streq(ebm->action, "window_menu"))
+       ebm->modifiers = current;
+   e_config_save_queue();
+}
+
+static void
+check_add(Evas_Object *box, const char *txt, Eina_Bool *val)
+{
+   Evas_Object *ck;
+
+   ck = elm_check_add(box);
+   evas_object_smart_callback_add(ck, "changed", modifiers_changed, val);
+   evas_object_show(ck);
+   E_ALIGN(ck, 0, 0.5);
+   elm_object_text_set(ck, _(txt));
+   elm_check_state_pointer_set(ck, val);
+   elm_box_pack_end(box, ck);
+}
+
+E_API int
+wizard_page_show(E_Wizard_Page *pg EINA_UNUSED)
+{
+   Evas_Object *o, *of, *ob;
+   unsigned int i, num = 0;
+   Eina_List *l;
+   char buf[4096];
+   Eina_Strbuf *sbuf;
+   E_Config_Binding_Mouse *ebm;
+
+   EINA_LIST_FOREACH(e_bindings->mouse_bindings, l, ebm)
+     if (eina_streq(ebm->action, "window_move") ||
+         eina_streq(ebm->action, "window_resize") ||
+         eina_streq(ebm->action, "window_menu"))
+       {
+          current = ebm->modifiers;
+          break;
+       }
+   if (!current) return 0;
+   e_wizard_title_set(_("Mouse Modifiers"));
+
+   keys[0].val = &shift;
+   keys[1].val = &ctrl;
+   keys[2].val = &alt;
+   keys[3].val = &win;
+   keys[4].val = &altgr;
+   sbuf = eina_strbuf_new();
+   for (i = 0; i < 5; i++)
+     {
+        keys[i].name = names[i];
+        *keys[i].val = (current & (1 << i));
+        if (!*keys[i].val) continue;
+        if (eina_strbuf_length_get(sbuf))
+          eina_strbuf_append_char(sbuf, '+');
+        eina_strbuf_append_printf(sbuf, "<hilight>%s</hilight>", 
_(keys[i].name));
+        num++;
+     }
+
+   of = elm_frame_add(e_comp->elm);
+   elm_object_text_set(of, _("Keys:"));
+   o = elm_box_add(of);
+   elm_object_content_set(of, o);
+
+   ob = elm_label_add(o);
+   snprintf(buf, sizeof(buf), _("Enlightenment sets default mouse bindings for 
objects.<br>"
+                                "These bindings provide three operations on 
click:<br>"
+                                "* <b>Move</b> (left button)<br>"
+                                "* <b>Resize</b> (middle/wheel button)<br>"
+                                "* <b>Open Menu</b> (right button)<br>"
+                                "The default key%s which must be held to 
activate these bindings<br>"
+                                "is '%s'. Configure the modifiers for this 
binding below."),
+                                num > 1 ? "s" : "", 
eina_strbuf_string_get(sbuf));
+   elm_object_text_set(ob, buf);
+   evas_object_show(ob);
+   E_ALIGN(ob, 0, 0.5);
+   elm_box_pack_end(o, ob);
+
+   eina_strbuf_free(sbuf);
+
+   for (i = 0; i < 5; i++)
+     check_add(o, keys[i].name, keys[i].val);
+
+   e_wizard_page_show(of);
+
+   return 1; /* 1 == show ui, and wait for user, 0 == just continue */return 1;
+}
+
+E_API int
+wizard_page_hide(E_Wizard_Page *pg EINA_UNUSED)
+{
+   return 1;
+}

-- 


Reply via email to