rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=85a0b9ec21f4d0bf01cf3d2e37e0c279079c5a02

commit 85a0b9ec21f4d0bf01cf3d2e37e0c279079c5a02
Author: Andrii Kroitor <an.kroi...@samsung.com>
Date:   Thu Mar 24 10:39:02 2016 +0200

    tabs: add shortcuts for group tabs
    
    ctrl+tab/ctrl+pg_down - next tab
    ctrl+shift+tab/ctrl+pg_up - prev tab
    ctrl+NUM - tab number NUM
    ctrl+w - close current tab
---
 src/bin/common/signals.h         | 10 ++++++++
 src/bin/ui/shortcuts/shortcuts.c | 53 ++++++++++++++++++++++++++++++++++++++++
 src/bin/ui/shortcuts/shortcuts.h | 13 ++++++++++
 src/bin/ui/tabs.c                | 53 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 129 insertions(+)

diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h
index 0908fd8..7c64c32 100644
--- a/src/bin/common/signals.h
+++ b/src/bin/common/signals.h
@@ -456,5 +456,15 @@ typedef struct {
 #define SIGNAL_SHORTCUT_ADD_ITEM "SIGNAL_SHORTCUT_ADD_ITEM"
 #define SIGNAL_SHORTCUT_ADD_PROGRAM "SIGNAL_SHORTCUT_ADD_PROGRAM"
 #define SIGNAL_SHORTCUT_DEL "SIGNAL_SHORTCUT_DEL"
+#define SIGNAL_SHORTCUT_TAB_NEXT "SIGNAL_SHORTCUT_TAB_NEXT"
+#define SIGNAL_SHORTCUT_TAB_PREV "SIGNAL_SHORTCUT_TAB_PREV"
+#define SIGNAL_SHORTCUT_TAB_CLOSE "SIGNAL_SHORTCUT_TAB_CLOSE"
+/**
+ * emited when shortcut is pressed.
+ * eventinfo - tab number.
+ *
+ * @ingroup Window
+ */
+#define SIGNAL_SHORTCUT_TAB_NUM "SIGNAL_SHORTCUT_TAB_NUM"
 
 #endif /* SIGNALS_H*/
diff --git a/src/bin/ui/shortcuts/shortcuts.c b/src/bin/ui/shortcuts/shortcuts.c
index 0155ef4..44bb056 100644
--- a/src/bin/ui/shortcuts/shortcuts.c
+++ b/src/bin/ui/shortcuts/shortcuts.c
@@ -121,11 +121,18 @@ _shortcut_cmp(Shortcut *s1, Shortcut *s2)
 static void
 _shortcut_handle(Shortcut_Type type)
 {
+   int num;
 #define SHORTCUT(NAME) \
  case SHORTCUT_TYPE_##NAME: \
     evas_object_smart_callback_call(ap.win, SIGNAL_SHORTCUT_##NAME, NULL); \
     break;
 
+#define SHORTCUT_NUM(NAME, SIGNAL, NUM) \
+ case SHORTCUT_TYPE_##NAME: \
+    num = NUM; \
+    evas_object_smart_callback_call(ap.win, SIGNAL, &num); \
+    break;
+
    switch (type)
      {
         SHORTCUT(REDO);
@@ -137,6 +144,19 @@ _shortcut_handle(Shortcut_Type type)
         SHORTCUT(ADD_ITEM);
         SHORTCUT(ADD_PROGRAM);
         SHORTCUT(DEL);
+        SHORTCUT_NUM(TAB_NUM1, SIGNAL_SHORTCUT_TAB_NUM, 1);
+        SHORTCUT_NUM(TAB_NUM2, SIGNAL_SHORTCUT_TAB_NUM, 2);
+        SHORTCUT_NUM(TAB_NUM3, SIGNAL_SHORTCUT_TAB_NUM, 3);
+        SHORTCUT_NUM(TAB_NUM4, SIGNAL_SHORTCUT_TAB_NUM, 4);
+        SHORTCUT_NUM(TAB_NUM5, SIGNAL_SHORTCUT_TAB_NUM, 5);
+        SHORTCUT_NUM(TAB_NUM6, SIGNAL_SHORTCUT_TAB_NUM, 6);
+        SHORTCUT_NUM(TAB_NUM7, SIGNAL_SHORTCUT_TAB_NUM, 7);
+        SHORTCUT_NUM(TAB_NUM8, SIGNAL_SHORTCUT_TAB_NUM, 8);
+        SHORTCUT_NUM(TAB_NUM9, SIGNAL_SHORTCUT_TAB_NUM, 9);
+        SHORTCUT_NUM(TAB_NUM10, SIGNAL_SHORTCUT_TAB_NUM, 10);
+        SHORTCUT(TAB_NEXT);
+        SHORTCUT(TAB_PREV);
+        SHORTCUT(TAB_CLOSE);
 
       case SHORTCUT_TYPE_NONE:
          break;
@@ -319,6 +339,39 @@ _default_shortcuts_add()
                  MOD_NONE, 27/*r*/);
    _add_shortcut(SHORTCUT_TYPE_DEL, SHORTCUT_TYPE_NONE,
                  MOD_NONE, 119/*del*/);
+
+   _add_shortcut(SHORTCUT_TYPE_TAB_NUM1, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 10/*1*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_NUM2, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 11/*2*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_NUM3, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 12/*3*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_NUM4, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 13/*4*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_NUM5, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 14/*5*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_NUM6, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 15/*6*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_NUM7, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 16/*7*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_NUM8, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 17/*8*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_NUM9, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 18/*9*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_NUM10, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 19/*0*/);
+
+   _add_shortcut(SHORTCUT_TYPE_TAB_NEXT, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 23/*TAB*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_PREV, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL|MOD_SHIFT, 23/*TAB*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_NEXT, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 117/*PG_DOWN*/);
+   _add_shortcut(SHORTCUT_TYPE_TAB_PREV, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 112/*PG_UP*/);
+
+   _add_shortcut(SHORTCUT_TYPE_TAB_CLOSE, SHORTCUT_TYPE_NONE,
+                 MOD_CTRL, 25/*w*/);
 }
 
 /*=============================================*/
diff --git a/src/bin/ui/shortcuts/shortcuts.h b/src/bin/ui/shortcuts/shortcuts.h
index 9707a15..385227c 100644
--- a/src/bin/ui/shortcuts/shortcuts.h
+++ b/src/bin/ui/shortcuts/shortcuts.h
@@ -63,6 +63,19 @@ typedef enum {
    SHORTCUT_TYPE_ADD_ITEM,
    SHORTCUT_TYPE_ADD_PROGRAM,
    SHORTCUT_TYPE_DEL,
+   SHORTCUT_TYPE_TAB_NUM1,
+   SHORTCUT_TYPE_TAB_NUM2,
+   SHORTCUT_TYPE_TAB_NUM3,
+   SHORTCUT_TYPE_TAB_NUM4,
+   SHORTCUT_TYPE_TAB_NUM5,
+   SHORTCUT_TYPE_TAB_NUM6,
+   SHORTCUT_TYPE_TAB_NUM7,
+   SHORTCUT_TYPE_TAB_NUM8,
+   SHORTCUT_TYPE_TAB_NUM9,
+   SHORTCUT_TYPE_TAB_NUM10,
+   SHORTCUT_TYPE_TAB_NEXT,
+   SHORTCUT_TYPE_TAB_PREV,
+   SHORTCUT_TYPE_TAB_CLOSE,
 
    SHORTCUT_TYPE_LAST,
 } Shortcut_Type;
diff --git a/src/bin/ui/tabs.c b/src/bin/ui/tabs.c
index 860e3f9..a9624bb 100644
--- a/src/bin/ui/tabs.c
+++ b/src/bin/ui/tabs.c
@@ -610,6 +610,55 @@ _shortcut_del_cb(void *data __UNUSED__,
      workspace_delete_request(tabs.current_workspace);
 }
 
+static void
+_shortcut_tab_next_cb(void *data __UNUSED__,
+                      Evas_Object *obj __UNUSED__,
+                      void *event_info __UNUSED__)
+{
+   Eina_List *l;
+   Tabs_Item *item;
+
+   l = eina_list_next(eina_list_data_find_list(tabs.items, 
elm_object_item_data_get(tabs.selected)));
+   item = eina_list_data_get(l);
+   if (item)
+     elm_toolbar_item_selected_set(item->toolbar_item, true);
+}
+
+static void
+_shortcut_tab_prev_cb(void *data __UNUSED__,
+                      Evas_Object *obj __UNUSED__,
+                      void *event_info __UNUSED__)
+{
+   Eina_List *l;
+   Tabs_Item *item;
+
+   l = eina_list_prev(eina_list_data_find_list(tabs.items, 
elm_object_item_data_get(tabs.selected)));
+   item = eina_list_data_get(l);
+   if (item)
+     elm_toolbar_item_selected_set(item->toolbar_item, true);
+}
+
+static void
+_shortcut_tab_num_cb(void *data __UNUSED__,
+                     Evas_Object *obj __UNUSED__,
+                     void *event_info)
+{
+   int num = *((int *)event_info);
+   Tabs_Item *item;
+
+   item = eina_list_nth(tabs.items, num - 1);
+   if (item)
+     elm_toolbar_item_selected_set(item->toolbar_item, true);
+}
+
+static void
+_shortcut_tab_close_cb(void *data __UNUSED__,
+                       Evas_Object *obj __UNUSED__,
+                       void *event_info __UNUSED__)
+{
+   tabs_current_tab_close();
+}
+
 Evas_Object *
 tabs_add(void)
 {
@@ -715,6 +764,10 @@ tabs_add(void)
    evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_ADD_STATE, 
_shortcut_add_state_cb, NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_ADD_PROGRAM, 
_shortcut_add_program_cb, NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_DEL, 
_shortcut_del_cb, NULL);
+   evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_TAB_NEXT, 
_shortcut_tab_next_cb, NULL);
+   evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_TAB_PREV, 
_shortcut_tab_prev_cb, NULL);
+   evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_TAB_NUM, 
_shortcut_tab_num_cb, NULL);
+   evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_TAB_CLOSE, 
_shortcut_tab_close_cb, NULL);
    return tabs.layout;
 }
 

-- 


Reply via email to