discomfitor pushed a commit to branch master. http://git.enlightenment.org/apps/empc.git/commit/?id=fd566329eb187ab732808dd4ecb081452cbda351
commit fd566329eb187ab732808dd4ecb081452cbda351 Author: Mike Blumenkrantz <zm...@osg.samsung.com> Date: Mon Mar 9 16:53:44 2015 -0400 filesystem entry receives focus now to fix backspace+compose functionality --- src/bin/empc.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/src/bin/empc.c b/src/bin/empc.c index 49f23d1..9dd86a3 100644 --- a/src/bin/empc.c +++ b/src/bin/empc.c @@ -1196,6 +1196,44 @@ filesystem_entry_hide(Evas_Object *ly) } static void +filesystem_entry_key_select(Eina_Bool forward, int dx, int dy, Eina_Bool multi) +{ + const Eina_List *l; + Elm_Object_Item *it, *it2; + unsigned int x, y, wx, wy; + Elm_Object_Item *(*fn)(const Elm_Object_Item *) = elm_gengrid_item_next_get; + + if (!forward) + fn = elm_gengrid_item_prev_get; + l = elm_gengrid_selected_items_get(eina_list_last_data_get(filesystems)); + it = eina_list_last_data_get(l); + if ((eina_list_count(l) > 1) && (!multi)) + while (eina_list_count(l) > 1) + { + elm_gengrid_item_selected_set(eina_list_data_get(l), 0); + l = elm_gengrid_selected_items_get(eina_list_last_data_get(filesystems)); + } + elm_gengrid_item_pos_get(it, &x, &y); + if (((!x) && (dx < 0)) || ((!y) && (dy < 0))) return; + wx = x + dx, wy = y + dy; + while ((x != wx) || (y != wy)) + { + it2 = it; + it = fn(it2); + if (!it) break; + elm_gengrid_item_pos_get(it, &x, &y); + if (forward && ((dx && (x > wx)) || (dy && (y > wy)))) break; + if ((!forward) && ((dx && (x < wx)) || (dy && (y < wy)))) break; + } + if (!it) it = it2; + if ((!multi) && (eina_list_data_get(l) != it)) + elm_gengrid_item_selected_set(eina_list_data_get(l), 0); + elm_gengrid_item_selected_set(it, 1); + elm_gengrid_item_bring_in(filesystem_idler_pos, ELM_GENGRID_ITEM_SCROLLTO_MIDDLE); + filesystem_entry_hide(elm_object_parent_widget_get(eina_list_last_data_get(filesystems))); +} + +static void filesystem_entry_key(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info) { Evas_Event_Key_Down *ev = event_info; @@ -1236,13 +1274,7 @@ filesystem_key(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, vo } else if (!strcmp(ev->key, "Escape")) { - str = elm_entry_entry_get(filesystem_entry); - if (str && str[0]) - { - elm_layout_signal_emit(ly, "empc,search,hide", "empc"); - elm_layout_signal_emit(ly, "empc,buttons,show", "empc"); - } - else if (eina_list_count(filesystems) > 1) + if (eina_list_count(filesystems) > 1) filesystem_prev(); } else if (ev->compose) @@ -3130,6 +3162,14 @@ key_down(void *data EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Key *ev) bgselector_next(elm_object_part_content_get(layout, EMPC_SWALLOW_BACKGROUND)); else if (bgchooser && (!strcmp(ev->key, "Up"))) bgselector_prev(elm_object_part_content_get(layout, EMPC_SWALLOW_BACKGROUND)); + else if (filesystem_state && evas_object_visible_get(filesystem_entry) && (!strcmp(ev->key, "Down"))) + filesystem_entry_key_select(1, 0, 1, ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT); + else if (filesystem_state && evas_object_visible_get(filesystem_entry) && (!strcmp(ev->key, "Up"))) + filesystem_entry_key_select(0, 0, -1, ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT); + else if (filesystem_state && evas_object_visible_get(filesystem_entry) && (!strcmp(ev->key, "Left"))) + filesystem_entry_key_select(0, -1, 0, ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT); + else if (filesystem_state && evas_object_visible_get(filesystem_entry) && (!strcmp(ev->key, "Right"))) + filesystem_entry_key_select(1, 1, 0, ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT); else if (bgchooser && ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter")))) elm_layout_signal_emit(layout, "empc,bg_chooser,stop", "empc"); else if ((!(ev->modifiers & ECORE_EVENT_MODIFIER_CTRL)) && (!(ev->modifiers & ECORE_EVENT_MODIFIER_ALT)) && --