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

-- 


Reply via email to