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) --