diff --git a/src/gui/gui-key.c b/src/gui/gui-key.c index 8bf89c63e..40a5ef5c1 100644 --- a/src/gui/gui-key.c +++ b/src/gui/gui-key.c @@ -752,42 +752,31 @@ gui_key_search (struct t_gui_key *keys, const char *key) } /* - * Compares two keys. - */ - -int -gui_key_cmp (const char *key, const char *search, int context) -{ - if (context == GUI_KEY_CONTEXT_MOUSE) - return (string_match (key, search, 1)) ? 0 : 1; - - return string_strncmp (key, search, utf8_strlen (search)); -} - -/* - * Searches for a key (maybe part of string). + * Searches for a key (maybe part of string) for context default, search or + * cursor (not for mouse). * * Returns pointer to key found, NULL if not found. */ struct t_gui_key * -gui_key_search_part (struct t_gui_buffer *buffer, int context, - const char *key) +gui_key_search_part (struct t_gui_buffer *buffer, int context, const char *key) { struct t_gui_key *ptr_key; + int length_key; if (!key) return NULL; + length_key = utf8_strlen (key); + for (ptr_key = (buffer) ? buffer->keys : gui_keys[context]; ptr_key; ptr_key = ptr_key->next_key) { if (ptr_key->key - && (((context != GUI_KEY_CONTEXT_CURSOR) - && (context != GUI_KEY_CONTEXT_MOUSE)) + && ((context != GUI_KEY_CONTEXT_CURSOR) || (ptr_key->key[0] != '@'))) { - if (gui_key_cmp (ptr_key->key, key, context) == 0) + if (string_strncmp (ptr_key->key, key, length_key) == 0) return ptr_key; } } @@ -1116,9 +1105,20 @@ gui_key_focus_command (const char *key, int context, if (strcmp (ptr_key->command, "-") == 0) continue; - /* ignore key if key for area is not matching */ - if (gui_key_cmp (key, ptr_key->area_key, context) != 0) + /* ignore key if key for area is not matching (context: cursor) */ + if ((context == GUI_KEY_CONTEXT_CURSOR) + && (string_strncmp (key, ptr_key->area_key, + utf8_strlen (ptr_key->area_key)) != 0)) + { continue; + } + + /* ignore key if key for area is not matching (context: mouse) */ + if ((context == GUI_KEY_CONTEXT_MOUSE) + && !string_match (key, ptr_key->area_key, 1)) + { + continue; + } /* ignore mouse event if not explicit requested */ if ((context == GUI_KEY_CONTEXT_MOUSE) && diff --git a/tests/unit/gui/test-gui-key.cpp b/tests/unit/gui/test-gui-key.cpp index e0ddc9d64..98735ca2e 100644 --- a/tests/unit/gui/test-gui-key.cpp +++ b/tests/unit/gui/test-gui-key.cpp @@ -26,8 +26,6 @@ extern "C" { #include "src/gui/gui-key.h" - -extern int gui_key_cmp (const char *key, const char *search, int context); } TEST_GROUP(GuiKey) @@ -228,52 +226,6 @@ TEST(GuiKey, Search) /* TODO: write tests */ } -/* - * Tests functions: - * gui_key_cmp - */ - -TEST(GuiKey, Cmp) -{ - LONGS_EQUAL(0, gui_key_cmp ("", "", GUI_KEY_CONTEXT_DEFAULT)); - LONGS_EQUAL(0, gui_key_cmp ("a", "", GUI_KEY_CONTEXT_DEFAULT)); - LONGS_EQUAL(-97, gui_key_cmp ("", "a", GUI_KEY_CONTEXT_DEFAULT)); - LONGS_EQUAL(0, gui_key_cmp ("a", "a", GUI_KEY_CONTEXT_DEFAULT)); - LONGS_EQUAL(32, gui_key_cmp ("meta-a", "meta-A", GUI_KEY_CONTEXT_DEFAULT)); - LONGS_EQUAL(-99, gui_key_cmp ("meta-a", "meta-ac", GUI_KEY_CONTEXT_DEFAULT)); - LONGS_EQUAL(0, gui_key_cmp ("meta-ac", "meta-a", GUI_KEY_CONTEXT_DEFAULT)); - - LONGS_EQUAL(0, gui_key_cmp ("", "", GUI_KEY_CONTEXT_SEARCH)); - LONGS_EQUAL(0, gui_key_cmp ("a", "", GUI_KEY_CONTEXT_SEARCH)); - LONGS_EQUAL(-97, gui_key_cmp ("", "a", GUI_KEY_CONTEXT_SEARCH)); - LONGS_EQUAL(0, gui_key_cmp ("a", "a", GUI_KEY_CONTEXT_SEARCH)); - LONGS_EQUAL(32, gui_key_cmp ("meta-a", "meta-A", GUI_KEY_CONTEXT_SEARCH)); - LONGS_EQUAL(-99, gui_key_cmp ("meta-a", "meta-ac", GUI_KEY_CONTEXT_SEARCH)); - LONGS_EQUAL(0, gui_key_cmp ("meta-ac", "meta-a", GUI_KEY_CONTEXT_SEARCH)); - - LONGS_EQUAL(0, gui_key_cmp ("", "", GUI_KEY_CONTEXT_CURSOR)); - LONGS_EQUAL(0, gui_key_cmp ("a", "", GUI_KEY_CONTEXT_CURSOR)); - LONGS_EQUAL(-97, gui_key_cmp ("", "a", GUI_KEY_CONTEXT_CURSOR)); - LONGS_EQUAL(0, gui_key_cmp ("a", "a", GUI_KEY_CONTEXT_CURSOR)); - LONGS_EQUAL(32, gui_key_cmp ("meta-a", "meta-A", GUI_KEY_CONTEXT_CURSOR)); - LONGS_EQUAL(-99, gui_key_cmp ("meta-a", "meta-ac", GUI_KEY_CONTEXT_CURSOR)); - LONGS_EQUAL(0, gui_key_cmp ("meta-ac", "meta-a", GUI_KEY_CONTEXT_CURSOR)); - - LONGS_EQUAL(1, gui_key_cmp ("", "", GUI_KEY_CONTEXT_MOUSE)); - LONGS_EQUAL(1, gui_key_cmp ("a", "", GUI_KEY_CONTEXT_MOUSE)); - LONGS_EQUAL(1, gui_key_cmp ("", "a", GUI_KEY_CONTEXT_MOUSE)); - LONGS_EQUAL(0, gui_key_cmp ("a", "a", GUI_KEY_CONTEXT_MOUSE)); - LONGS_EQUAL(0, gui_key_cmp ("@chat(fset.fset):button2", - "@chat(fset.fset):button2", - GUI_KEY_CONTEXT_MOUSE)); - LONGS_EQUAL(0, gui_key_cmp ("@chat(fset.fset):button2-gesture-right", - "@chat(fset.fset):button2*", - GUI_KEY_CONTEXT_MOUSE)); - LONGS_EQUAL(1, gui_key_cmp ("@chat(Fset.fset):button2-gesture-right", - "@chat(fset.fset):button2*", - GUI_KEY_CONTEXT_MOUSE)); -} - /* * Tests functions: * gui_key_search_part