From 6896025d1accb0a734d58069670666b41c7e605f Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 20 Aug 2012 09:10:31 +0000 Subject: [PATCH] break out keybind matching and replace original usage SVN revision: 75458 --- src/bin/e_utils.c | 35 ++++++++++++++++ src/bin/e_utils.h | 2 +- .../e_int_config_keybindings.c | 41 ++++--------------- 3 files changed, 43 insertions(+), 35 deletions(-) diff --git a/src/bin/e_utils.c b/src/bin/e_utils.c index af8088f29..5ffa197cb 100644 --- a/src/bin/e_utils.c +++ b/src/bin/e_utils.c @@ -1524,3 +1524,38 @@ e_util_terminal_desktop_get(void) } return tdesktop; } + + +EAPI E_Config_Binding_Key * +e_util_binding_match(const Eina_List *bindlist, Ecore_Event_Key *ev, unsigned int *num, const E_Config_Binding_Key *skip) +{ + E_Config_Binding_Key *bi; + const Eina_List *l; + unsigned int mod = E_BINDING_MODIFIER_NONE; + + if (num) *num = 0; + + if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT) + mod |= E_BINDING_MODIFIER_SHIFT; + if (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) + mod |= E_BINDING_MODIFIER_CTRL; + if (ev->modifiers & ECORE_EVENT_MODIFIER_ALT) + mod |= E_BINDING_MODIFIER_ALT; + if (ev->modifiers & ECORE_EVENT_MODIFIER_WIN) + mod |= E_BINDING_MODIFIER_WIN; + /* see comment in e_bindings on numlock + if (ev->modifiers & ECORE_X_LOCK_NUM) + mod |= ECORE_X_LOCK_NUM; + */ + EINA_LIST_FOREACH(bindlist ?: e_config->key_bindings, l, bi) + { + if (bi != skip) + { + if ((bi->modifiers == mod) && (!strcmp(bi->key, ev->keyname))) + return bi; + } + if (num) (*num)++; + } + *num = 0; + return NULL; +} diff --git a/src/bin/e_utils.h b/src/bin/e_utils.h index 97e698e25..759d12cad 100644 --- a/src/bin/e_utils.h +++ b/src/bin/e_utils.h @@ -60,7 +60,7 @@ EAPI void e_util_win_auto_resize_fill(E_Win *win); EAPI Eina_Bool e_util_module_config_check(const char *module_name, int loaded, int current); EAPI int e_util_container_desk_count_get(E_Container *con); - +EAPI E_Config_Binding_Key *e_util_binding_match(const Eina_List *bindlist, Ecore_Event_Key *ev, unsigned int *num, const E_Config_Binding_Key *skip); EAPI Eina_Bool e_util_fullscreen_curreny_any(void); EAPI Eina_Bool e_util_fullscreen_any(void); EAPI const char *e_util_time_str_get(long int seconds); diff --git a/src/modules/conf_keybindings/e_int_config_keybindings.c b/src/modules/conf_keybindings/e_int_config_keybindings.c index 1938ebfb8..0b7528507 100644 --- a/src/modules/conf_keybindings/e_int_config_keybindings.c +++ b/src/modules/conf_keybindings/e_int_config_keybindings.c @@ -1001,46 +1001,19 @@ _grab_key_down_cb(void *data, } else { - E_Config_Binding_Key *bi = NULL, *bi2 = NULL; + E_Config_Binding_Key *bi = NULL; Eina_List *l = NULL; unsigned int mod = E_BINDING_MODIFIER_NONE; - int found = 0, n; + unsigned int n, found; - if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT) - mod |= E_BINDING_MODIFIER_SHIFT; - if (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) - mod |= E_BINDING_MODIFIER_CTRL; - if (ev->modifiers & ECORE_EVENT_MODIFIER_ALT) - mod |= E_BINDING_MODIFIER_ALT; - if (ev->modifiers & ECORE_EVENT_MODIFIER_WIN) - mod |= E_BINDING_MODIFIER_WIN; - /* see comment in e_bindings on numlock - if (ev->modifiers & ECORE_X_LOCK_NUM) - mod |= ECORE_X_LOCK_NUM; - */ + if (cfdata->locals.add) - { - found = 0; - for (l = cfdata->binding.key, n = 0; l && !found; l = l->next, n++) - { - bi = l->data; - if (bi->modifiers == mod && !strcmp(bi->key, ev->keyname)) - found = 1; - } - } + found = !!e_util_binding_match(cfdata->binding.key, ev, &n, NULL); else if (cfdata->locals.cur && cfdata->locals.cur[0]) { - found = 0; sscanf(cfdata->locals.cur, "k%d", &n); bi = eina_list_nth(cfdata->binding.key, n); - - for (l = cfdata->binding.key, n = 0; l && !found; l = l->next, n++) - { - bi2 = l->data; - if (bi == bi2) continue; - if (bi2->modifiers == mod && !strcmp(bi2->key, ev->keyname)) - found = 1; - } + found = !!e_util_binding_match(cfdata->binding.key, ev, &n, bi); } if (!found) @@ -1087,7 +1060,7 @@ _grab_key_down_cb(void *data, { char *label; E_Ilist_Item *it; - int i = 0; + unsigned int i = 0; sscanf(cfdata->locals.cur, "k%d", &n); bi = eina_list_nth(cfdata->binding.key, n); @@ -1111,7 +1084,7 @@ _grab_key_down_cb(void *data, } else { - int i = 0; + unsigned int i = 0; E_Ilist_Item *it; #if 0 /* this advice is rather irritating as one sees that the