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; } --