billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=8354e8372618e4efde0f6854c541f5afdfeb59f1

commit 8354e8372618e4efde0f6854c541f5afdfeb59f1
Author: Boris Faure <bill...@gmail.com>
Date:   Fri Jun 14 11:19:30 2019 +0200

    Revert "win: let elm handle focus"
    
    This reverts commit 113bf27619a57fa7ec8ade65fb5abc082152aec8.
    
    Not yet fully working. Previous behaviour was better.
---
 src/bin/controls.c |  2 +-
 src/bin/win.c      | 37 ++++++++++++++++++++++++++++++++-----
 2 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/src/bin/controls.c b/src/bin/controls.c
index 279fea3..5aa2e62 100644
--- a/src/bin/controls.c
+++ b/src/bin/controls.c
@@ -277,7 +277,6 @@ _sep_add_h(Evas_Object *win)
 static void
 controls_hide(Controls_Ctx *ctx, Eina_Bool call_cb)
 {
-   elm_object_focus_set(ctx->frame, EINA_FALSE);
    if (ctx->win)
      {
         evas_object_event_callback_del(ctx->win, EVAS_CALLBACK_DEL, 
_cb_saved_del);
@@ -294,6 +293,7 @@ controls_hide(Controls_Ctx *ctx, Eina_Bool call_cb)
      {
         evas_object_del(ctx->over);
      }
+   elm_object_focus_set(ctx->frame, EINA_FALSE);
 
    if (call_cb)
      {
diff --git a/src/bin/win.c b/src/bin/win.c
index 202b622..d9e47c6 100644
--- a/src/bin/win.c
+++ b/src/bin/win.c
@@ -461,6 +461,10 @@ _solo_focus(Term_Container *tc, Term_Container *relative)
         edje_object_signal_emit(term->bg, "focus,in", "terminology");
         elm_layout_signal_emit(term->base, "focus,in", "terminology");
      }
+   if (term->wn->cmdbox)
+     elm_object_focus_set(term->wn->cmdbox, EINA_FALSE);
+
+   elm_object_focus_set(term->termio, EINA_TRUE);
    termio_event_feed_mouse_in(term->termio);
    termio_focus_in(term->termio);
 
@@ -549,6 +553,8 @@ _cb_win_focus_in(void *data,
    if (!tc->is_focused)
      elm_win_urgent_set(wn->win, EINA_FALSE);
    tc->is_focused = EINA_TRUE;
+   if ((wn->cmdbox_up) && (wn->cmdbox))
+     elm_object_focus_set(wn->cmdbox, EINA_TRUE);
    if (wn->on_popover)
        return;
 
@@ -1028,6 +1034,9 @@ _win_unfocus(Term_Container *tc, Term_Container *relative)
           }
         tc->is_focused = EINA_FALSE;
         wn->child->unfocus(wn->child, tc);
+
+        if ((wn->cmdbox_up) && (wn->cmdbox))
+          elm_object_focus_set(wn->cmdbox, EINA_FALSE);
      }
 }
 
@@ -1689,7 +1698,6 @@ win_new(const char *name, const char *role, const char 
*title,
                                   EVAS_CALLBACK_MOUSE_MOVE,
                                   _cb_win_mouse_move,
                                   wn);
-   elm_object_focus_set(wn->base, EINA_TRUE);
 
    if (ecore_imf_init())
      {
@@ -4918,6 +4926,21 @@ _cb_send_end(void *data,
    _sendfile_progress_hide(term);
 }
 
+static Eina_Bool
+_cb_cmd_focus(void *data)
+{
+   Win *wn = data;
+   Term *term;
+   Term_Container *tc;
+
+   wn->cmdbox_focus_timer = NULL;
+   tc = (Term_Container*) wn;
+   term = tc->focused_term_get(tc);
+   if (term && term->wn->cmdbox)
+     elm_object_focus_set(wn->cmdbox, EINA_TRUE);
+   return EINA_FALSE;
+}
+
 static Eina_Bool
 _cb_cmd_del(void *data)
 {
@@ -4942,6 +4965,8 @@ _cb_cmd_activated(void *data,
    Term *term;
    Term_Container *tc;
 
+   if (wn->cmdbox)
+       elm_object_focus_set(wn->cmdbox, EINA_FALSE);
    elm_layout_signal_emit(wn->base, "cmdbox,hide", "terminology");
    tc = (Term_Container *) wn;
    term = tc->focused_term_get(tc);
@@ -4972,6 +4997,8 @@ _cb_cmd_aborted(void *data,
 {
    Win *wn = data;
 
+   if (wn->cmdbox)
+       elm_object_focus_set(wn->cmdbox, EINA_FALSE);
    elm_layout_signal_emit(wn->base, "cmdbox,hide", "terminology");
    if (wn->cmdbox_focus_timer)
      {
@@ -5059,6 +5086,8 @@ _cb_cmdbox(void *data,
    evas_object_show(term->wn->cmdbox);
    if (term->wn->cmdbox_focus_timer)
      ecore_timer_del(term->wn->cmdbox_focus_timer);
+   term->wn->cmdbox_focus_timer =
+     ecore_timer_add(0.2, _cb_cmd_focus, term->wn);
    if (term->wn->cmdbox_del_timer)
      {
         ecore_timer_del(term->wn->cmdbox_del_timer);
@@ -5410,6 +5439,8 @@ _term_bg_config(Term *term)
              edje_object_signal_emit(term->bg, "focus,in", "terminology");
              elm_layout_signal_emit(term->base, "focus,in", "terminology");
           }
+        if (term->wn->cmdbox)
+          elm_object_focus_set(term->wn->cmdbox, EINA_FALSE);
      }
    if (term->miniview_shown)
         edje_object_signal_emit(term->bg, "miniview,on", "terminology");
@@ -5527,17 +5558,14 @@ _cb_options(void *data,
 {
    Term *term = data;
    Term_Container *tc = term->container;
-   ERR("cb options");
 
    term->wn->on_popover++;
 
    term_ref(term);
    tc->unfocus(tc, NULL);
-   ERR("unfocus");
 
    controls_show(term->wn->win, term->wn->base, term->bg, term->termio,
                  _cb_options_done, term);
-   ERR("controls shown");
 }
 
 void
@@ -5584,7 +5612,6 @@ term_new(Win *wn, Config *config, const char *cmd,
    term->config = config;
 
    term->base = o = elm_layout_add(wn->win);
-   elm_object_focus_allow_set(o, EINA_TRUE);
    theme_apply_elm(o, term->config, "terminology/core");
    evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);

-- 


Reply via email to