billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=14d799d63ecb85f374b6f2b9d7344916029e6347

commit 14d799d63ecb85f374b6f2b9d7344916029e6347
Author: Boris Faure <[email protected]>
Date:   Sun Jul 7 16:26:32 2019 +0200

    tab_selector: fix focus issue
---
 src/bin/sel.c | 48 ++++++++++++++++++++++++++++--------------------
 src/bin/sel.h |  1 +
 src/bin/win.c | 57 +++++++++++++++++++++++++++++++++++++++++----------------
 3 files changed, 70 insertions(+), 36 deletions(-)

diff --git a/src/bin/sel.c b/src/bin/sel.c
index 5df50ed..5250666 100644
--- a/src/bin/sel.c
+++ b/src/bin/sel.c
@@ -182,18 +182,18 @@ _autozoom(Evas_Object *obj)
    sd->autozoom_timeout = ecore_timer_add(0.5, _autozoom_reset, obj);
 }
 
+
 void
-_key_down_cb(void *data,
-             Evas *_e EINA_UNUSED,
-             Evas_Object *obj,
-             void *event)
+sel_key_down(Evas_Object *obj,
+             Evas_Event_Key_Down *event)
 {
    Evas_Event_Key_Down *ev = event;
-   Sel *sd = evas_object_smart_data_get(data);
+   Sel *sd = evas_object_smart_data_get(obj);
    Eina_List *l;
    Entry *en;
 
-   if (!sd) return;
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+
    if ((!strcmp(ev->key, "Next")) ||
        (!strcmp(ev->key, "Right")))
      {
@@ -207,11 +207,14 @@ _key_down_cb(void *data,
                        sel_entry_selected_set(obj, en->obj, EINA_FALSE);
                        break;
                     }
-                  else return;
+                  else
+                    {
+                       return;
+                    }
                }
           }
         sd->exit_now = EINA_FALSE;
-        _autozoom(data);
+        _autozoom(obj);
      }
    else if ((!strcmp(ev->key, "Prior")) ||
             (!strcmp(ev->key, "Left")))
@@ -226,11 +229,14 @@ _key_down_cb(void *data,
                        sel_entry_selected_set(obj, en->obj, EINA_FALSE);
                        break;
                     }
-                  else return;
+                  else
+                    {
+                       return;
+                    }
                }
           }
         sd->exit_now = EINA_FALSE;
-        _autozoom(data);
+        _autozoom(obj);
      }
    else if (!strcmp(ev->key, "Up"))
      {
@@ -255,12 +261,14 @@ _key_down_cb(void *data,
                          }
                     }
                   if (found == EINA_FALSE)
-                    return;
+                    {
+                       return;
+                    }
                   break;
                }
           }
         sd->exit_now = EINA_FALSE;
-        _autozoom(data);
+        _autozoom(obj);
      }
    else if (!strcmp(ev->key, "Down"))
      {
@@ -285,12 +293,14 @@ _key_down_cb(void *data,
                          }
                     }
                   if (found == EINA_FALSE)
-                    return;
+                    {
+                       return;
+                    }
                   break;
                }
           }
         sd->exit_now = EINA_FALSE;
-        _autozoom(data);
+        _autozoom(obj);
      }
    else if ((!strcmp(ev->key, "Return")) ||
             (!strcmp(ev->key, "KP_Enter")) ||
@@ -303,8 +313,8 @@ _key_down_cb(void *data,
              ecore_timer_del(sd->autozoom_timeout);
              sd->autozoom_timeout = NULL;
           }
-        evas_object_smart_callback_call(data, "ending", NULL);
-        sel_zoom(data, 1.0);
+        evas_object_smart_callback_call(obj, "ending", NULL);
+        sel_zoom(obj, 1.0);
      }
    else if (!strcmp(ev->key, "Escape"))
      {
@@ -322,8 +332,8 @@ _key_down_cb(void *data,
              ecore_timer_del(sd->autozoom_timeout);
              sd->autozoom_timeout = NULL;
           }
-        evas_object_smart_callback_call(data, "ending", NULL);
-        sel_zoom(data, 1.0);
+        evas_object_smart_callback_call(obj, "ending", NULL);
+        sel_zoom(obj, 1.0);
      }
 }
 
@@ -670,8 +680,6 @@ sel_add(Evas_Object *parent)
                                   _mouse_up_cb, obj);
    evas_object_event_callback_add(sd->o_event, EVAS_CALLBACK_MOUSE_MOVE,
                                   _mouse_move_cb, obj);
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN,
-                                  _key_down_cb, obj);
    sd->zoom = 1.0;
 
    return obj;
diff --git a/src/bin/sel.h b/src/bin/sel.h
index f01f545..0dcd12a 100644
--- a/src/bin/sel.h
+++ b/src/bin/sel.h
@@ -13,5 +13,6 @@ void sel_entry_selected_set(Evas_Object *obj, Evas_Object 
*entry, Eina_Bool keep
 void sel_zoom(Evas_Object *obj, double zoom);
 void sel_orig_zoom_set(Evas_Object *obj, double zoom);
 void sel_exit(Evas_Object *obj);
+void sel_key_down(Evas_Object *obj, Evas_Event_Key_Down *event);
 
 #endif
diff --git a/src/bin/win.c b/src/bin/win.c
index dd0466e..021bb6e 100644
--- a/src/bin/win.c
+++ b/src/bin/win.c
@@ -1303,7 +1303,30 @@ _cb_win_key_down(void *data,
    DBG("ctrl:%d alt:%d shift:%d win:%d meta:%d hyper:%d",
        ctrl, alt, shift, win, meta, hyper);
 
-   /* 1st/ Miniview */
+   /* 1st/ Tab selector */
+     {
+        Term_Container *tc = (Term_Container*) wn;
+
+        term = tc->focused_term_get(tc);
+        if (term)
+          {
+             Term_Container *tc = term->container;
+             Term_Container *tc_parent = tc->parent;
+
+             if (tc_parent->type == TERM_CONTAINER_TYPE_TABS)
+               {
+                  Tabs *tabs = (Tabs*) tc_parent;
+
+                  if (tabs->selector != NULL)
+                    {
+                       sel_key_down(tabs->selector, ev);
+                       return;
+                    }
+               }
+          }
+     }
+
+   /* 2nd/ Miniview */
    if (wn->group_input)
      {
         GROUPED_INPUT_TERM_FOREACH(wn, l, term)
@@ -1329,7 +1352,7 @@ _cb_win_key_down(void *data,
      }
 
 
-   /* 2nd/ PopMedia */
+   /* 3rd/ PopMedia */
    done = EINA_FALSE;
    if (wn->group_input)
      {
@@ -1361,7 +1384,7 @@ _cb_win_key_down(void *data,
         goto end;
      }
 
-   /* 3rd/ Handle key bindings */
+   /* 4th/ Handle key bindings */
    done = EINA_FALSE;
    if (wn->group_input)
      {
@@ -1391,7 +1414,7 @@ _cb_win_key_down(void *data,
      }
    done = EINA_FALSE;
 
-   /* 4th/ Composing */
+   /* 5th/ Composing */
    /* composing */
    if (wn->khdl.imf)
      {
@@ -1472,7 +1495,7 @@ _cb_win_key_down(void *data,
           goto end;
      }
 
-   /* 5th/ send key to pty */
+   /* 6th/ send key to pty */
    if (wn->group_input)
      {
         GROUPED_INPUT_TERM_FOREACH(wn, l, term)
@@ -1489,7 +1512,7 @@ _cb_win_key_down(void *data,
           keyin_handle_key_to_pty(ty, ev, alt, shift, ctrl);
      }
 
-   /* 6th: specifics: jump on keypress / flicker on key */
+   /* 7th: specifics: jump on keypress / flicker on key */
 end:
    if (wn->group_input)
      {
@@ -2719,6 +2742,8 @@ _tabs_restore(Tabs *tabs)
    Term *term;
    Solo *solo;
    Win *wn = tc->wn;
+   Evas_Object *selector = tabs->selector;
+   Evas_Object *selector_bg = tabs->selector_bg;
 
    if (!tabs->selector)
      return;
@@ -2741,19 +2766,17 @@ _tabs_restore(Tabs *tabs)
           tab_item->tc->unfocus(tab_item->tc, tc);
      }
 
-   evas_object_smart_callback_del_full(tabs->selector, "selected",
+   evas_object_smart_callback_del_full(selector, "selected",
                                   _tabs_selector_cb_selected, tabs);
-   evas_object_smart_callback_del_full(tabs->selector, "exit",
+   evas_object_smart_callback_del_full(selector, "exit",
                                   _tabs_selector_cb_exit, tabs);
-   evas_object_smart_callback_del_full(tabs->selector, "ending",
+   evas_object_smart_callback_del_full(selector, "ending",
                                   _tabs_selector_cb_ending, tabs);
-   evas_object_del(tabs->selector);
-   evas_object_del(tabs->selector_bg);
+
+
    tabs->selector = NULL;
    tabs->selector_bg = NULL;
 
-   wn->on_popover = EINA_FALSE;
-
    /* XXX: reswallow in parent */
    tc->parent->swallow(tc->parent, tc, tc);
    solo = (Solo*)tabs->current->tc;
@@ -2763,6 +2786,11 @@ _tabs_restore(Tabs *tabs)
    _tabs_refresh(tabs);
    tabs->current->tc->unfocus(tabs->current->tc, tabs->current->tc);
    tabs->current->tc->focus(tabs->current->tc, tabs->current->tc);
+
+   elm_object_focus_set(selector, EINA_FALSE);
+
+   evas_object_del(selector);
+   evas_object_del(selector_bg);
 }
 
 static void
@@ -2822,8 +2850,6 @@ _cb_tab_selector_show(Tabs *tabs, Tab_Item *to_item)
    if (tabs->selector_bg)
      return;
 
-   wn->on_popover = EINA_TRUE;
-
    o = tc->get_evas_object(tc);
    evas_object_geometry_get(o, &x, &y, &w, &h);
 
@@ -2899,7 +2925,6 @@ _cb_tab_selector_show(Tabs *tabs, Tab_Item *to_item)
                                EINA_TRUE);
         sel_exit(tabs->selector);
      }
-   elm_object_focus_set(tabs->selector, EINA_TRUE);
 }
 
 static void

-- 


Reply via email to