billiob pushed a commit to branch master.

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

commit e8bd673f209b4c96390510d801ccd96e7ecf48cf
Author: Boris Faure <bill...@gmail.com>
Date:   Mon Sep 14 23:01:32 2015 +0200

    send ctrl[1-0] to term if "going to tab#" is not possible. Closes T2723
---
 src/bin/keyin.c | 116 +++++++++++++++++++++++++++++---------------------------
 src/bin/win.c   |  42 +++-----------------
 src/bin/win.h   |   1 +
 3 files changed, 67 insertions(+), 92 deletions(-)

diff --git a/src/bin/keyin.c b/src/bin/keyin.c
index b17f4fa..4de4006 100644
--- a/src/bin/keyin.c
+++ b/src/bin/keyin.c
@@ -7,6 +7,7 @@
 #include "termio.h"
 #include "termcmd.h"
 #include "keyin.h"
+#include "win.h"
 
 typedef struct _Tty_Key Tty_Key;
 typedef struct _Key_Values Key_Values;
@@ -352,25 +353,28 @@ keyin_handle_up(Keys_Handler *khdl, Evas_Event_Key_Up *ev)
 /* {{{ Callbacks */
 
 static Eina_Bool
-cb_term_prev(Evas_Object *term)
+cb_term_prev(Evas_Object *termio_obj)
 {
-   evas_object_smart_callback_call(term, "prev", NULL);
+   evas_object_smart_callback_call(termio_obj, "prev", NULL);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_term_next(Evas_Object *term)
+cb_term_next(Evas_Object *termio_obj)
 {
-   evas_object_smart_callback_call(term, "next", NULL);
+   evas_object_smart_callback_call(termio_obj, "next", NULL);
    return EINA_TRUE;
 }
 
-#define CB_TAB(N)\
-static Eina_Bool \
-cb_tab_##N(Evas_Object *term) \
-{                            \
-   evas_object_smart_callback_call(term, "tab,"#N, NULL); \
-   return EINA_TRUE; \
+#define CB_TAB(N)                              \
+static Eina_Bool                               \
+cb_tab_##N(Evas_Object *termio_obj)            \
+{                                              \
+   int n = (N == 0) ? 9 : N - 1;               \
+   Term *term = termio_term_get(termio_obj);   \
+   if (!term)                                  \
+     return EINA_FALSE;                        \
+   return term_tab_go(term, n);                \
 }
 
 CB_TAB(0)
@@ -386,94 +390,94 @@ CB_TAB(9)
 #undef CB_TAB
 
 static Eina_Bool
-cb_cmd_box(Evas_Object *term)
+cb_cmd_box(Evas_Object *termio_obj)
 {
-   evas_object_smart_callback_call(term, "cmdbox", NULL);
+   evas_object_smart_callback_call(termio_obj, "cmdbox", NULL);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_split_h(Evas_Object *term)
+cb_split_h(Evas_Object *termio_obj)
 {
-   evas_object_smart_callback_call(term, "split,h", NULL);
+   evas_object_smart_callback_call(termio_obj, "split,h", NULL);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_split_v(Evas_Object *term)
+cb_split_v(Evas_Object *termio_obj)
 {
-   evas_object_smart_callback_call(term, "split,v", NULL);
+   evas_object_smart_callback_call(termio_obj, "split,v", NULL);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_tab_new(Evas_Object *term)
+cb_tab_new(Evas_Object *termio_obj)
 {
-   evas_object_smart_callback_call(term, "new", NULL);
+   evas_object_smart_callback_call(termio_obj, "new", NULL);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_exited(Evas_Object *term)
+cb_exited(Evas_Object *termio_obj)
 {
-   evas_object_smart_callback_call(term, "exited", NULL);
+   evas_object_smart_callback_call(termio_obj, "exited", NULL);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_tab_select(Evas_Object *term)
+cb_tab_select(Evas_Object *termio_obj)
 {
-   evas_object_smart_callback_call(term, "select", NULL);
+   evas_object_smart_callback_call(termio_obj, "select", NULL);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_copy_clipboard(Evas_Object *term)
+cb_copy_clipboard(Evas_Object *termio_obj)
 {
-   Termpty *ty = termio_pty_get(term);
+   Termpty *ty = termio_pty_get(termio_obj);
 
    if (!ty || !ty->selection.is_active)
      return EINA_FALSE;
-   termio_take_selection(term, ELM_SEL_TYPE_CLIPBOARD);
+   termio_take_selection(termio_obj, ELM_SEL_TYPE_CLIPBOARD);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_paste_clipboard(Evas_Object *term)
+cb_paste_clipboard(Evas_Object *termio_obj)
 {
-   termio_paste_selection(term, ELM_SEL_TYPE_CLIPBOARD);
+   termio_paste_selection(termio_obj, ELM_SEL_TYPE_CLIPBOARD);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_paste_primary(Evas_Object *term)
+cb_paste_primary(Evas_Object *termio_obj)
 {
-   termio_paste_selection(term, ELM_SEL_TYPE_PRIMARY);
+   termio_paste_selection(termio_obj, ELM_SEL_TYPE_PRIMARY);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_copy_primary(Evas_Object *term)
+cb_copy_primary(Evas_Object *termio_obj)
 {
-   Termpty *ty = termio_pty_get(term);
+   Termpty *ty = termio_pty_get(termio_obj);
 
    if (!ty || !ty->selection.is_active)
      return EINA_FALSE;
-   termio_take_selection(term, ELM_SEL_TYPE_PRIMARY);
+   termio_take_selection(termio_obj, ELM_SEL_TYPE_PRIMARY);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_miniview(Evas_Object *term)
+cb_miniview(Evas_Object *termio_obj)
 {
-   term_miniview_toggle(termio_term_get(term));
+   term_miniview_toggle(termio_term_get(termio_obj));
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_win_fullscreen(Evas_Object *term)
+cb_win_fullscreen(Evas_Object *termio_obj)
 {
-   Evas_Object *win = termio_win_get(term);
+   Evas_Object *win = termio_win_get(termio_obj);
    Eina_Bool fullscreen;
 
    if (!win)
@@ -484,78 +488,78 @@ cb_win_fullscreen(Evas_Object *term)
 }
 
 static Eina_Bool
-cb_increase_font_size(Evas_Object *term)
+cb_increase_font_size(Evas_Object *termio_obj)
 {
-   termcmd_do(term, NULL, NULL, "f+");
+   termcmd_do(termio_obj, NULL, NULL, "f+");
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_decrease_font_size(Evas_Object *term)
+cb_decrease_font_size(Evas_Object *termio_obj)
 {
-   termcmd_do(term, NULL, NULL, "f-");
+   termcmd_do(termio_obj, NULL, NULL, "f-");
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_reset_font_size(Evas_Object *term)
+cb_reset_font_size(Evas_Object *termio_obj)
 {
-   termcmd_do(term, NULL, NULL, "f");
+   termcmd_do(termio_obj, NULL, NULL, "f");
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_big_font_size(Evas_Object *term)
+cb_big_font_size(Evas_Object *termio_obj)
 {
-   termcmd_do(term, NULL, NULL, "fb");
+   termcmd_do(termio_obj, NULL, NULL, "fb");
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_scroll_up_page(Evas_Object *term)
+cb_scroll_up_page(Evas_Object *termio_obj)
 {
-   Termpty *ty = termio_pty_get(term);
+   Termpty *ty = termio_pty_get(termio_obj);
 
    if (!ty || ty->altbuf)
      return EINA_FALSE;
 
-   termio_scroll_delta(term, 1, 1);
+   termio_scroll_delta(termio_obj, 1, 1);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_scroll_down_page(Evas_Object *term)
+cb_scroll_down_page(Evas_Object *termio_obj)
 {
-   Termpty *ty = termio_pty_get(term);
+   Termpty *ty = termio_pty_get(termio_obj);
 
    if (!ty || ty->altbuf)
      return EINA_FALSE;
 
-   termio_scroll_delta(term, -1, 1);
+   termio_scroll_delta(termio_obj, -1, 1);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_scroll_up_line(Evas_Object *term)
+cb_scroll_up_line(Evas_Object *termio_obj)
 {
-   Termpty *ty = termio_pty_get(term);
+   Termpty *ty = termio_pty_get(termio_obj);
 
    if (!ty || ty->altbuf)
      return EINA_FALSE;
 
-   termio_scroll_delta(term, 1, 0);
+   termio_scroll_delta(termio_obj, 1, 0);
    return EINA_TRUE;
 }
 
 static Eina_Bool
-cb_scroll_down_line(Evas_Object *term)
+cb_scroll_down_line(Evas_Object *termio_obj)
 {
-   Termpty *ty = termio_pty_get(term);
+   Termpty *ty = termio_pty_get(termio_obj);
 
    if (!ty || ty->altbuf)
      return EINA_FALSE;
 
-   termio_scroll_delta(term, -1, 0);
+   termio_scroll_delta(termio_obj, -1, 0);
    return EINA_TRUE;
 }
 
diff --git a/src/bin/win.c b/src/bin/win.c
index bb2b17b..a37aaa5 100644
--- a/src/bin/win.c
+++ b/src/bin/win.c
@@ -1708,8 +1708,8 @@ _tabbar_fill(Tabs *tabs)
      }
 }
 
-static void
-_tab_go(Term *term, int tnum)
+Eina_Bool
+term_tab_go(Term *term, int tnum)
 {
    Term_Container *tc = term->container,
                   *child = tc;
@@ -1733,33 +1733,13 @@ _tab_go(Term *term, int tnum)
              tc = tc->parent;
              continue;
           }
-        if (tab_item == tabs->current)
-          return;
-        tab_item->tc->focus(tab_item->tc, child);
-        return;
+        if (tab_item != tabs->current)
+           tab_item->tc->focus(tab_item->tc, child);
+        return EINA_TRUE;
      }
+   return EINA_FALSE;
 }
 
-#define CB_TAB(TAB) \
-static void                                             \
-_cb_tab_##TAB(void *data, Evas_Object *obj EINA_UNUSED, \
-             void *event EINA_UNUSED)                   \
-{                                                       \
-   _tab_go(data, TAB - 1);                              \
-}
-
-CB_TAB(1)
-CB_TAB(2)
-CB_TAB(3)
-CB_TAB(4)
-CB_TAB(5)
-CB_TAB(6)
-CB_TAB(7)
-CB_TAB(8)
-CB_TAB(9)
-CB_TAB(10)
-#undef CB_TAB
-
 static void
 _tabs_selector_cb_selected(void *data,
                            Evas_Object *obj EINA_UNUSED,
@@ -4092,16 +4072,6 @@ term_new(Win *wn, Config *config, const char *cmd,
    evas_object_smart_callback_add(o, "split,v", _cb_split_v, term);
    evas_object_smart_callback_add(o, "title,change", _cb_title, term);
    evas_object_smart_callback_add(o, "icon,change", _cb_icon, term);
-   evas_object_smart_callback_add(o, "tab,1", _cb_tab_1, term);
-   evas_object_smart_callback_add(o, "tab,2", _cb_tab_2, term);
-   evas_object_smart_callback_add(o, "tab,3", _cb_tab_3, term);
-   evas_object_smart_callback_add(o, "tab,4", _cb_tab_4, term);
-   evas_object_smart_callback_add(o, "tab,5", _cb_tab_5, term);
-   evas_object_smart_callback_add(o, "tab,6", _cb_tab_6, term);
-   evas_object_smart_callback_add(o, "tab,7", _cb_tab_7, term);
-   evas_object_smart_callback_add(o, "tab,8", _cb_tab_8, term);
-   evas_object_smart_callback_add(o, "tab,9", _cb_tab_9, term);
-   evas_object_smart_callback_add(o, "tab,0", _cb_tab_10, term);
    evas_object_show(o);
 
    evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
diff --git a/src/bin/win.h b/src/bin/win.h
index fda7b44..62c3c4b 100644
--- a/src/bin/win.h
+++ b/src/bin/win.h
@@ -15,6 +15,7 @@ Evas_Object *term_termio_get(Term *term);
 Evas_Object *term_miniview_get(Term *term);
 void term_miniview_toggle(Term *term);
 void term_miniview_hide(Term *term);
+Eina_Bool term_tab_go(Term *term, int tnum);
 
 void split_horizontally(Evas_Object *win, Evas_Object *term, const char *cmd);
 void split_vertically(Evas_Object *win, Evas_Object *term, const char *cmd);

-- 


Reply via email to