rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=ccd84d00adbbcdf701a2326ad61767992ebac8e8
commit ccd84d00adbbcdf701a2326ad61767992ebac8e8 Author: Mykyta Biliavskyi <m.biliavs...@samsung.com> Date: Wed Oct 19 19:06:22 2016 +0300 Shortcuts: use keyname instead keycode. Keycode is a related to keyboard vendor. Keynames are manage by EFL ecore library. On any kind of keyboard(layouts, or hardware models) shortcuts should works fine. --- src/bin/ui/shortcuts/shortcuts.c | 112 ++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 49 deletions(-) diff --git a/src/bin/ui/shortcuts/shortcuts.c b/src/bin/ui/shortcuts/shortcuts.c index 7e1ffd6..0520c5a 100644 --- a/src/bin/ui/shortcuts/shortcuts.c +++ b/src/bin/ui/shortcuts/shortcuts.c @@ -104,6 +104,7 @@ struct _Shortcut unsigned int modifiers; Shortcut_Type type_press; Shortcut_Type type_unpress; + char *keyname; }; typedef struct _Shortcut Shortcut; @@ -125,7 +126,16 @@ static int _shortcut_cmp(Shortcut *s1, Shortcut *s2) { if (s1->modifiers == s2->modifiers) - return s1->keycode - s2->keycode; + { + if (s1->keyname && s2->keyname) + { + return strcmp(s1->keyname, s2->keyname); + } + else + { + return -1; + } + } return s1->modifiers - s2->modifiers; } @@ -267,6 +277,7 @@ _key_press_event_cb(void *data __UNUSED__, int type __UNUSED__, void *event) break; } + sc.keyname = (char *)ev->keyname; /* ignore hotkey if */ obj_name = evas_object_type_get(elm_object_focused_object_get(ap.win)); if (/* it is without modifier or with shift-only */ @@ -286,7 +297,7 @@ _key_press_event_cb(void *data __UNUSED__, int type __UNUSED__, void *event) return ECORE_CALLBACK_PASS_ON; } - DBG("key_down: %s %d, mod: %d", ev->key, ev->keycode, ev->modifiers & 255); + DBG("key_down: %s %d name[%s], mod: %d", ev->key, ev->keycode, ev->keyname, ev->modifiers & 255); ap.shortcuts->last_modifiers = sc.modifiers; @@ -346,6 +357,7 @@ _key_unpress_event_cb(void *data __UNUSED__, int type __UNUSED__, void *event) } DBG("key_up : %s %d, mod: %d", ev->key, ev->keycode, ev->modifiers & 255); + sc.keyname = (char *)ev->keyname; unpressed_modifiers = ap.shortcuts->last_modifiers & (~sc.modifiers); EINA_LIST_FOREACH_SAFE(ap.shortcuts->held_shortcuts, l, l_n, shortcut) { @@ -385,7 +397,8 @@ static void _add_shortcut(Shortcut_Type type_press, Shortcut_Type type_unpress, unsigned int modifiers, - unsigned int keycode) + unsigned int keycode, + char *keyname) { Shortcut *sc; assert(ap.shortcuts != NULL); @@ -394,6 +407,7 @@ _add_shortcut(Shortcut_Type type_press, sc->type_press = type_press; sc->type_unpress = type_unpress; sc->keycode = keycode; + sc->keyname = keyname; sc->modifiers = modifiers; ap.shortcuts->shortcuts = eina_list_sorted_insert(ap.shortcuts->shortcuts, @@ -406,105 +420,105 @@ _default_shortcuts_add() assert(ap.shortcuts != NULL); _add_shortcut(SHORTCUT_TYPE_QUIT, SHORTCUT_TYPE_NONE, - MOD_CTRL, 24/*q*/); + MOD_CTRL, 24, "q" /*q*/); _add_shortcut(SHORTCUT_TYPE_UNDO, SHORTCUT_TYPE_NONE, - MOD_CTRL, 52/*z*/); + MOD_CTRL, 52, "z" /*z*/); _add_shortcut(SHORTCUT_TYPE_REDO, SHORTCUT_TYPE_NONE, - MOD_CTRL, 29/*y*/); + MOD_CTRL, 29, "y"/*y*/); _add_shortcut(SHORTCUT_TYPE_SAVE, SHORTCUT_TYPE_NONE, - MOD_CTRL, 39/*s*/); + MOD_CTRL, 39, "s"/*s*/); _add_shortcut(SHORTCUT_TYPE_ADD_GROUP, SHORTCUT_TYPE_NONE, - MOD_CTRL, 57/*n*/); + MOD_CTRL, 57, "n"/*n*/); _add_shortcut(SHORTCUT_TYPE_ADD_PART, SHORTCUT_TYPE_NONE, - MOD_NONE, 24/*q*/); + MOD_NONE, 24, "q"/*q*/); _add_shortcut(SHORTCUT_TYPE_ADD_STATE, SHORTCUT_TYPE_NONE, - MOD_NONE, 25/*w*/); + MOD_NONE, 25, "w"/*w*/); _add_shortcut(SHORTCUT_TYPE_ADD_ITEM, SHORTCUT_TYPE_NONE, - MOD_NONE, 26/*e*/); + MOD_NONE, 26, "e"/*e*/); _add_shortcut(SHORTCUT_TYPE_ADD_PROGRAM, SHORTCUT_TYPE_NONE, - MOD_NONE, 27/*r*/); + MOD_NONE, 27, "r"/*r*/); _add_shortcut(SHORTCUT_TYPE_ADD_DATA_ITEM, SHORTCUT_TYPE_NONE, - MOD_NONE, 28/*t*/); + MOD_NONE, 28, "t"/*t*/); _add_shortcut(SHORTCUT_TYPE_DEL, SHORTCUT_TYPE_NONE, - MOD_NONE, 119/*del*/); + MOD_NONE, 119, "Delete"/*del*/); _add_shortcut(SHORTCUT_TYPE_STATE_NEXT, SHORTCUT_TYPE_NONE, - MOD_NONE, 39/*s*/); + MOD_NONE, 39, "s"/*s*/); _add_shortcut(SHORTCUT_TYPE_PART_NEXT, SHORTCUT_TYPE_NONE, - MOD_NONE, 53/*x*/); + MOD_NONE, 53, "x"/*x*/); _add_shortcut(SHORTCUT_TYPE_PART_PREV, SHORTCUT_TYPE_NONE, - MOD_NONE, 52/*z*/); + MOD_NONE, 52, "z"/*z*/); _add_shortcut(SHORTCUT_TYPE_PART_SHOWHIDE, SHORTCUT_TYPE_NONE, - MOD_NONE, 43/*h*/); + MOD_NONE, 43, "h"/*h*/); _add_shortcut(SHORTCUT_TYPE_ALL_PARTS_SHOWHIDE, SHORTCUT_TYPE_NONE, - MOD_SHIFT, 43/*h*/); + MOD_SHIFT, 43, "h"/*h*/); _add_shortcut(SHORTCUT_TYPE_TAB_NUM1, SHORTCUT_TYPE_NONE, - MOD_CTRL, 10/*1*/); + MOD_CTRL, 10, "1"/*1*/); _add_shortcut(SHORTCUT_TYPE_TAB_NUM2, SHORTCUT_TYPE_NONE, - MOD_CTRL, 11/*2*/); + MOD_CTRL, 11, "2"/*2*/); _add_shortcut(SHORTCUT_TYPE_TAB_NUM3, SHORTCUT_TYPE_NONE, - MOD_CTRL, 12/*3*/); + MOD_CTRL, 12, "3"/*3*/); _add_shortcut(SHORTCUT_TYPE_TAB_NUM4, SHORTCUT_TYPE_NONE, - MOD_CTRL, 13/*4*/); + MOD_CTRL, 13, "4"/*4*/); _add_shortcut(SHORTCUT_TYPE_TAB_NUM5, SHORTCUT_TYPE_NONE, - MOD_CTRL, 14/*5*/); + MOD_CTRL, 14, "5"/*5*/); _add_shortcut(SHORTCUT_TYPE_TAB_NUM6, SHORTCUT_TYPE_NONE, - MOD_CTRL, 15/*6*/); + MOD_CTRL, 15, "6"/*6*/); _add_shortcut(SHORTCUT_TYPE_TAB_NUM7, SHORTCUT_TYPE_NONE, - MOD_CTRL, 16/*7*/); + MOD_CTRL, 16, "7"/*7*/); _add_shortcut(SHORTCUT_TYPE_TAB_NUM8, SHORTCUT_TYPE_NONE, - MOD_CTRL, 17/*8*/); + MOD_CTRL, 17, "8"/*8*/); _add_shortcut(SHORTCUT_TYPE_TAB_NUM9, SHORTCUT_TYPE_NONE, - MOD_CTRL, 18/*9*/); + MOD_CTRL, 18, "9"/*9*/); _add_shortcut(SHORTCUT_TYPE_TAB_NUM10, SHORTCUT_TYPE_NONE, - MOD_CTRL, 19/*0*/); + MOD_CTRL, 19, "0"/*0*/); _add_shortcut(SHORTCUT_TYPE_TAB_NEXT, SHORTCUT_TYPE_NONE, - MOD_CTRL, 23/*TAB*/); + MOD_CTRL, 23, "Tab"/*TAB*/); _add_shortcut(SHORTCUT_TYPE_TAB_PREV, SHORTCUT_TYPE_NONE, - MOD_CTRL|MOD_SHIFT, 23/*TAB*/); + MOD_CTRL|MOD_SHIFT, 23, "Tab"/*TAB*/); _add_shortcut(SHORTCUT_TYPE_TAB_NEXT, SHORTCUT_TYPE_NONE, - MOD_CTRL, 117/*PG_DOWN*/); + MOD_CTRL, 117, "Next"/*PG_DOWN*/); _add_shortcut(SHORTCUT_TYPE_TAB_PREV, SHORTCUT_TYPE_NONE, - MOD_CTRL, 112/*PG_UP*/); + MOD_CTRL, 112, "Prior"/*PG_UP*/); _add_shortcut(SHORTCUT_TYPE_TAB_CLOSE, SHORTCUT_TYPE_NONE, - MOD_CTRL, 25/*w*/); + MOD_CTRL, 25, "w"/*w*/); _add_shortcut(SHORTCUT_TYPE_HELP, SHORTCUT_TYPE_NONE, - MOD_NONE, 67/*F1*/); + MOD_NONE, 67, "F1"/*F1*/); _add_shortcut(SHORTCUT_TYPE_MODE_NORMAL, SHORTCUT_TYPE_NONE, - MOD_NONE, 68/*F2*/); + MOD_NONE, 68, "F2"/*F2*/); _add_shortcut(SHORTCUT_TYPE_MODE_CODE, SHORTCUT_TYPE_NONE, - MOD_NONE, 69/*F3*/); + MOD_NONE, 69, "F3"/*F3*/); _add_shortcut(SHORTCUT_TYPE_MODE_DEMO, SHORTCUT_TYPE_NONE, - MOD_NONE, 70/*F4*/); + MOD_NONE, 70, "F4"/*F4*/); _add_shortcut(SHORTCUT_TYPE_TAB_IMAGE_MANAGER, SHORTCUT_TYPE_NONE, - MOD_NONE, 73/*F7*/); + MOD_NONE, 73, "F7"/*F7*/); _add_shortcut(SHORTCUT_TYPE_TAB_SOUND_MANAGER, SHORTCUT_TYPE_NONE, - MOD_NONE, 74/*F8*/); + MOD_NONE, 74, "F8"/*F8*/); _add_shortcut(SHORTCUT_TYPE_TAB_STYLE_MANAGER, SHORTCUT_TYPE_NONE, - MOD_NONE, 75/*F9*/); + MOD_NONE, 75, "F9"/*F9*/); _add_shortcut(SHORTCUT_TYPE_TAB_COLOR_CLASS_MANAGER, SHORTCUT_TYPE_NONE, - MOD_NONE, 76/*F10*/); + MOD_NONE, 76, "F10"/*F10*/); _add_shortcut(SHORTCUT_TYPE_ZOOM_IN, SHORTCUT_TYPE_NONE, - MOD_NONE, 86/*KP_+*/); + MOD_NONE, 86, "KP_Add"/*KP_+*/); _add_shortcut(SHORTCUT_TYPE_ZOOM_OUT, SHORTCUT_TYPE_NONE, - MOD_NONE, 82/*KP_-*/); + MOD_NONE, 82, "KP_Subtract"/*KP_-*/); _add_shortcut(SHORTCUT_TYPE_ZOOM_RESET, SHORTCUT_TYPE_NONE, - MOD_NONE, 106/*KP_/ */); + MOD_NONE, 106, "KP_Divide"/*KP_/ */); _add_shortcut(SHORTCUT_TYPE_OBJECT_AREA, SHORTCUT_TYPE_NONE, - MOD_NONE, 32/*o*/); + MOD_NONE, 32, "o"/*o*/); _add_shortcut(SHORTCUT_TYPE_CANCEL, SHORTCUT_TYPE_NONE, - MOD_NONE, 9/*ESC*/); + MOD_NONE, 9, "Escape"/*ESC*/); _add_shortcut(SHORTCUT_TYPE_DONE, SHORTCUT_TYPE_NONE, - MOD_NONE, 36/*ENTER*/); + MOD_NONE, 36, "Return"/*ENTER*/); _add_shortcut(SHORTCUT_TYPE_DONE, SHORTCUT_TYPE_NONE, - MOD_NONE, 104/*KP_ENTER*/); + MOD_NONE, 104, "KP_Enter"/*KP_ENTER*/); } --