billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=6f27cdc3ece421ebbfdae83e60df19bc4d356c3d

commit 6f27cdc3ece421ebbfdae83e60df19bc4d356c3d
Author: Boris Faure <bill...@gmail.com>
Date:   Tue Sep 30 22:07:28 2014 +0200

     key bindings now support the win key
---
 src/bin/config.c       | 80 ++++++++++++++++++++++++++------------------------
 src/bin/config.h       |  1 +
 src/bin/keyin.c        | 23 ++++++++-------
 src/bin/keyin.h        |  2 +-
 src/bin/options_keys.c |  7 +++--
 src/bin/termio.c       |  3 +-
 6 files changed, 64 insertions(+), 52 deletions(-)

diff --git a/src/bin/config.c b/src/bin/config.c
index 60b55bc..2717dfa 100644
--- a/src/bin/config.c
+++ b/src/bin/config.c
@@ -66,6 +66,8 @@ config_init(void)
    EET_DATA_DESCRIPTOR_ADD_BASIC
      (edd_keys, Config_Keys, "shift", shift, EET_T_UCHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC
+     (edd_keys, Config_Keys, "win", win, EET_T_UCHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC
      (edd_keys, Config_Keys, "cb", cb, EET_T_STRING);
 
    EET_DATA_DESCRIPTOR_ADD_BASIC
@@ -282,61 +284,62 @@ static void
 _add_default_keys(Config *config)
 {
    Config_Keys *kb;
-#define ADD_KB(Name, Ctrl, Alt, Shift, Cb)                        \
+#define ADD_KB(Name, Ctrl, Alt, Shift, Win, Cb)                   \
    kb = calloc(1, sizeof(Config_Keys));                           \
    if (!kb) return;                                               \
    kb->keyname = eina_stringshare_add_length(Name, strlen(Name)); \
    kb->ctrl = Ctrl;                                               \
    kb->alt = Alt;                                                 \
    kb->shift = Shift;                                             \
+   kb->win = Win;                                                 \
    kb->cb = eina_stringshare_add_length(Cb, strlen(Cb));          \
    config->keys = eina_list_append(config->keys, kb)
 
-   ADD_KB("Prior", 1, 0, 0, "term_prev");
-   ADD_KB("Next", 1, 0, 0, "term_next");
-   ADD_KB("0", 1, 0, 0, "tab_10");
-   ADD_KB("1", 1, 0, 0, "tab_1");
-   ADD_KB("2", 1, 0, 0, "tab_2");
-   ADD_KB("3", 1, 0, 0, "tab_3");
-   ADD_KB("4", 1, 0, 0, "tab_4");
-   ADD_KB("5", 1, 0, 0, "tab_5");
-   ADD_KB("6", 1, 0, 0, "tab_6");
-   ADD_KB("7", 1, 0, 0, "tab_7");
-   ADD_KB("8", 1, 0, 0, "tab_8");
-   ADD_KB("9", 1, 0, 0, "tab_9");
+   ADD_KB("Prior", 1, 0, 0, 0, "term_prev");
+   ADD_KB("Next", 1, 0, 0, 0, "term_next");
+   ADD_KB("0", 1, 0, 0, 0, "tab_10");
+   ADD_KB("1", 1, 0, 0, 0, "tab_1");
+   ADD_KB("2", 1, 0, 0, 0, "tab_2");
+   ADD_KB("3", 1, 0, 0, 0, "tab_3");
+   ADD_KB("4", 1, 0, 0, 0, "tab_4");
+   ADD_KB("5", 1, 0, 0, 0, "tab_5");
+   ADD_KB("6", 1, 0, 0, 0, "tab_6");
+   ADD_KB("7", 1, 0, 0, 0, "tab_7");
+   ADD_KB("8", 1, 0, 0, 0, "tab_8");
+   ADD_KB("9", 1, 0, 0, 0, "tab_9");
 
    /* Alt- */
-   ADD_KB("Home", 0, 1, 0, "cmd_box");
-   ADD_KB("w", 0, 1, 0, "copy_primary");
-   ADD_KB("Return", 0, 1, 0, "paste_primary");
+   ADD_KB("Home", 0, 1, 0, 0, "cmd_box");
+   ADD_KB("w", 0, 1, 0, 0, "copy_primary");
+   ADD_KB("Return", 0, 1, 0, 0, "paste_primary");
 
    /* Ctrl-Shift- */
-   ADD_KB("Prior", 1, 0, 1, "split_h");
-   ADD_KB("Next", 1, 0, 1, "split_v");
-   ADD_KB("t", 1, 0, 1, "tab_new");
-   ADD_KB("End", 1, 0, 1, "exited");
-   ADD_KB("Home", 1, 0, 1, "tab_select");
-   ADD_KB("c", 1, 0, 1, "copy_clipboard");
-   ADD_KB("v", 1, 0, 1, "paste_clipboard");
-   ADD_KB("h", 1, 0, 1, "miniview");
-   ADD_KB("Insert", 1, 0, 1, "paste_clipboard");
+   ADD_KB("Prior", 1, 0, 1, 0, "split_h");
+   ADD_KB("Next", 1, 0, 1, 0, "split_v");
+   ADD_KB("t", 1, 0, 1, 0, "tab_new");
+   ADD_KB("End", 1, 0, 1, 0, "exited");
+   ADD_KB("Home", 1, 0, 1, 0, "tab_select");
+   ADD_KB("c", 1, 0, 1, 0, "copy_clipboard");
+   ADD_KB("v", 1, 0, 1, 0, "paste_clipboard");
+   ADD_KB("h", 1, 0, 1, 0, "miniview");
+   ADD_KB("Insert", 1, 0, 1, 0, "paste_clipboard");
 
    /* Ctrl-Alt- */
-   ADD_KB("equal", 1, 1, 0, "increase_font_size");
-   ADD_KB("minus", 1, 1, 0, "decrease_font_size");
-   ADD_KB("0", 1, 1, 0, "reset_font_size");
-   ADD_KB("9", 1, 1, 0, "big_font_size");
+   ADD_KB("equal", 1, 1, 0, 0, "increase_font_size");
+   ADD_KB("minus", 1, 1, 0, 0, "decrease_font_size");
+   ADD_KB("0", 1, 1, 0, 0, "reset_font_size");
+   ADD_KB("9", 1, 1, 0, 0, "big_font_size");
 
    /* Shift- */
-   ADD_KB("Prior", 0, 0, 1, "one_page_up");
-   ADD_KB("Next", 0, 0, 1, "one_page_down");
-   ADD_KB("Up", 0, 0, 1, "one_line_up");
-   ADD_KB("Down", 0, 0, 1, "one_line_down");
-   ADD_KB("Insert", 0, 0, 1, "paste_primary");
-   ADD_KB("KP_Add", 0, 0, 1, "increase_font_size");
-   ADD_KB("KP_Subtract", 0, 0, 1, "decrease_font_size");
-   ADD_KB("KP_Multiply", 0, 0, 1, "reset_font_size");
-   ADD_KB("KP_Divide", 0, 0, 1, "copy_clipboard");
+   ADD_KB("Prior", 0, 0, 1, 0, "one_page_up");
+   ADD_KB("Next", 0, 0, 1, 0, "one_page_down");
+   ADD_KB("Up", 0, 0, 1, 0, "one_line_up");
+   ADD_KB("Down", 0, 0, 1, 0, "one_line_down");
+   ADD_KB("Insert", 0, 0, 1, 0, "paste_primary");
+   ADD_KB("KP_Add", 0, 0, 1, 0, "increase_font_size");
+   ADD_KB("KP_Subtract", 0, 0, 1, 0, "decrease_font_size");
+   ADD_KB("KP_Multiply", 0, 0, 1, 0, "reset_font_size");
+   ADD_KB("KP_Divide", 0, 0, 1, 0, "copy_clipboard");
 
 #undef ADD_KB
 }
@@ -612,6 +615,7 @@ config_fork(Config *config)
         key2->ctrl = key->ctrl;
         key2->alt = key->alt;
         key2->shift = key->shift;
+        key2->win = key->win;
         key2->cb = key->cb;
         eina_stringshare_ref(key->cb);
         config2->keys = eina_list_append(config2->keys, key2);
diff --git a/src/bin/config.h b/src/bin/config.h
index f11e8f0..be3e5b3 100644
--- a/src/bin/config.h
+++ b/src/bin/config.h
@@ -13,6 +13,7 @@ struct _Config_Keys
    Eina_Bool ctrl;
    Eina_Bool alt;
    Eina_Bool shift;
+   Eina_Bool win;
    const char *cb;
 };
 /* TODO: separate config per terminal (tab, window) and global. */
diff --git a/src/bin/keyin.c b/src/bin/keyin.c
index ade4a65..e48cfe8 100644
--- a/src/bin/keyin.c
+++ b/src/bin/keyin.c
@@ -41,6 +41,7 @@ struct _Key_Binding
    uint16_t ctrl  : 1;
    uint16_t alt   : 1;
    uint16_t shift : 1;
+   uint16_t win   : 1;
 
    uint16_t len;
 
@@ -193,7 +194,7 @@ _handle_key_to_pty(Termpty *ty, const Evas_Event_Key_Down 
*ev,
 
 static Key_Binding *
 key_binding_lookup(const char *keyname,
-                   Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift)
+                   Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift, Eina_Bool 
win)
 {
    Key_Binding *kb;
    size_t len = strlen(keyname);
@@ -205,6 +206,7 @@ key_binding_lookup(const char *keyname,
    kb->ctrl = ctrl;
    kb->alt = alt;
    kb->shift = shift;
+   kb->win = win;
    kb->len = len;
    kb->keyname = alloca(sizeof(char) * len + 1);
    strncpy((char *)kb->keyname, keyname, kb->len + 1);
@@ -214,11 +216,11 @@ key_binding_lookup(const char *keyname,
 
 Eina_Bool
 keyin_handle(Keys_Handler *khdl, Termpty *ty, const Evas_Event_Key_Down *ev,
-             Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift)
+             Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift, Eina_Bool win)
 {
    Key_Binding *kb;
 
-   kb = key_binding_lookup(ev->keyname, ctrl, alt, shift);
+   kb = key_binding_lookup(ev->keyname, ctrl, alt, shift, win);
    if (kb)
      {
         if (kb->cb(ty->obj))
@@ -605,8 +607,8 @@ _key_binding_key_cmp(const void *key1, int key1_length,
      return 1;
    else
      {
-        unsigned int m1 = (kb1->ctrl << 2) | (kb1->alt << 1) | kb1->shift,
-                     m2 = (kb2->ctrl << 2) | (kb2->alt << 1) | kb2->shift;
+        unsigned int m1 = (kb1->win << 3) | (kb1->ctrl << 2) | (kb1->alt << 1) 
| kb1->shift,
+                     m2 = (kb2->win << 3) | (kb2->ctrl << 2) | (kb2->alt << 1) 
| kb2->shift;
         if (m1 < m2)
           return -1;
         else if (m1 > m2)
@@ -623,15 +625,15 @@ _key_binding_key_hash(const void *key, int key_length)
    int hash;
 
    hash = eina_hash_djb2(key, key_length);
-   hash &= 0x1fffffff;
-   hash |= (kb->ctrl << 31) | (kb->alt << 30) | (kb->shift << 29);
+   hash &= 0x0fffffff;
+   hash |= (kb->win << 31) | (kb->ctrl << 30) | (kb->alt << 29) | (kb->shift 
<< 28);
    return hash;
 }
 
 
 static Key_Binding *
 _key_binding_new(const char *keyname,
-                 Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift,
+                 Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift, Eina_Bool win,
                  Key_Binding_Cb cb)
 {
    Key_Binding *kb;
@@ -644,6 +646,7 @@ _key_binding_new(const char *keyname,
    kb->ctrl = ctrl;
    kb->alt = alt;
    kb->shift = shift;
+   kb->win = win;
    kb->len = len;
    kb->keyname = eina_stringshare_add(keyname);
    kb->cb = cb;
@@ -672,7 +675,7 @@ keyin_add_config(Config_Keys *key)
      {
         Key_Binding *kb;
         kb = _key_binding_new(key->keyname, key->ctrl, key->alt,
-                              key->shift, action->cb);
+                              key->shift, key->win, action->cb);
         if (!kb) return -1;
         if (eina_hash_find(_key_bindings, kb) ||
             (!eina_hash_direct_add(_key_bindings, kb, kb)))
@@ -690,7 +693,7 @@ keyin_remove_config(Config_Keys *key)
 {
    Key_Binding *kb;
 
-   kb = key_binding_lookup(key->keyname, key->ctrl, key->alt, key->shift);
+   kb = key_binding_lookup(key->keyname, key->ctrl, key->alt, key->shift, 
key->win);
    if (kb)
      eina_hash_del_by_key(_key_bindings, kb);
    return 0;
diff --git a/src/bin/keyin.h b/src/bin/keyin.h
index bf5ba6e..ef5fc0e 100644
--- a/src/bin/keyin.h
+++ b/src/bin/keyin.h
@@ -14,7 +14,7 @@ struct _Keys_Handler
 void keyin_compose_seq_reset(Keys_Handler *khdl);
 Eina_Bool key_is_modifier(const char *key);
 Eina_Bool keyin_handle(Keys_Handler *khdl, Termpty *ty, const 
Evas_Event_Key_Down *ev,
-                       Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift);
+                       Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift, 
Eina_Bool win);
 
 void keyin_handle_up(Keys_Handler *khdl, Evas_Event_Key_Up *ev);
 
diff --git a/src/bin/options_keys.c b/src/bin/options_keys.c
index fdcdbbc..05a07e2 100644
--- a/src/bin/options_keys.c
+++ b/src/bin/options_keys.c
@@ -48,10 +48,11 @@ _shortcut_button_add(Evas_Object *bx, const Config_Keys 
*key)
    const char *txt;
    Evas_Object *hs;
 
-   txt = eina_stringshare_printf("%s%s%s%s",
+   txt = eina_stringshare_printf("%s%s%s%s%s",
                                  key->ctrl ? _("Ctrl+") : "",
                                  key->alt ? _("Alt+") : "",
                                  key->shift ? _("Shift+") : "",
+                                 key->win ? _("Win+") : "",
                                  key->keyname);
    hs = elm_hoversel_add(_fr);
    elm_hoversel_hover_parent_set(hs, _fr);
@@ -72,7 +73,7 @@ _cb_key_up(void *data, Evas *e EINA_UNUSED,
            Evas_Object *obj, void *event)
 {
    Evas_Event_Key_Up *ev = event;
-   int ctrl, alt, shift, res;
+   int ctrl, alt, shift, win, res;
    Config_Keys *cfg_key;
    Shortcut_Action *action;
    Evas_Object *bx = data;
@@ -83,6 +84,7 @@ _cb_key_up(void *data, Evas *e EINA_UNUSED,
    ctrl = evas_key_modifier_is_set(ev->modifiers, "Control");
    alt = evas_key_modifier_is_set(ev->modifiers, "Alt");
    shift = evas_key_modifier_is_set(ev->modifiers, "Shift");
+   win = evas_key_modifier_is_set(ev->modifiers, "Super");
 
    _hover_del(obj);
 
@@ -100,6 +102,7 @@ _cb_key_up(void *data, Evas *e EINA_UNUSED,
    cfg_key->ctrl = ctrl;
    cfg_key->alt = alt;
    cfg_key->shift = shift;
+   cfg_key->win = win;
    cfg_key->cb = eina_stringshare_add(action->action);
 
    res = keyin_add_config(cfg_key);
diff --git a/src/bin/termio.c b/src/bin/termio.c
index 34628ce..ff2c7ad 100644
--- a/src/bin/termio.c
+++ b/src/bin/termio.c
@@ -1888,6 +1888,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
    int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control");
    int alt = evas_key_modifier_is_set(ev->modifiers, "Alt");
    int shift = evas_key_modifier_is_set(ev->modifiers, "Shift");
+   int win = evas_key_modifier_is_set(ev->modifiers, "Super");
 
    EINA_SAFETY_ON_NULL_RETURN(sd);
    EINA_SAFETY_ON_NULL_RETURN(ev->key);
@@ -1896,7 +1897,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
      return;
 
 
-   if (keyin_handle(&sd->khdl, sd->pty, ev, ctrl, alt, shift))
+   if (keyin_handle(&sd->khdl, sd->pty, ev, ctrl, alt, shift, win))
      goto end;
 
    if (sd->jump_on_keypress)

-- 


Reply via email to