rimmed pushed a commit to branch master.

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

commit ed3a5a3b772fea11d55bfbb427a1e2c11b34dd83
Author: Andrii Kroitor <an.kroi...@samsung.com>
Date:   Wed Apr 6 11:22:41 2016 +0300

    workspace: add shortcuts for selecting next(x) and prev(z) parts
---
 src/bin/common/signals.h               |  2 ++
 src/bin/ui/shortcuts/shortcuts.c       |  6 +++++
 src/bin/ui/shortcuts/shortcuts.h       |  2 ++
 src/bin/ui/tabs.c                      | 20 ++++++++++++++
 src/bin/ui/workspace/group_navigator.c | 49 ++++++++++++++++++++++++++++++++++
 src/bin/ui/workspace/group_navigator.h |  6 +++++
 src/bin/ui/workspace/workspace.c       | 16 +++++++++++
 src/bin/ui/workspace/workspace.h       |  6 +++++
 8 files changed, 107 insertions(+)

diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h
index 6318355..90bbe1e 100644
--- a/src/bin/common/signals.h
+++ b/src/bin/common/signals.h
@@ -468,6 +468,8 @@ typedef struct {
 #define SIGNAL_SHORTCUT_MODE_CODE "SIGNAL_SHORTCUT_MODE_CODE"
 #define SIGNAL_SHORTCUT_MODE_DEMO "SIGNAL_SHORTCUT_MODE_DEMO"
 #define SIGNAL_SHORTCUT_STATE_NEXT "SIGNAL_SHORTCUT_STATE_NEXT"
+#define SIGNAL_SHORTCUT_PART_NEXT "SIGNAL_SHORTCUT_PART_NEXT"
+#define SIGNAL_SHORTCUT_PART_PREV "SIGNAL_SHORTCUT_PART_PREV"
 #define SIGNAL_SHORTCUT_PART_SHOWHIDE "SIGNAL_SHORTCUT_PART_SHOWHIDE"
 #define SIGNAL_SHORTCUT_ALL_PARTS_SHOWHIDE "SIGNAL_SHORTCUT_ALL_PARTS_SHOWHIDE"
 #define SIGNAL_SHORTCUT_PART_UNSELECT "SIGNAL_SHORTCUT_PART_UNSELECT"
diff --git a/src/bin/ui/shortcuts/shortcuts.c b/src/bin/ui/shortcuts/shortcuts.c
index 0420e8d..9dd4441 100644
--- a/src/bin/ui/shortcuts/shortcuts.c
+++ b/src/bin/ui/shortcuts/shortcuts.c
@@ -149,6 +149,8 @@ _shortcut_handle(Shortcut_Type type)
         SHORTCUT(ADD_PROGRAM);
         SHORTCUT(DEL);
         SHORTCUT(STATE_NEXT);
+        SHORTCUT(PART_NEXT);
+        SHORTCUT(PART_PREV);
         SHORTCUT(PART_SHOWHIDE);
         SHORTCUT(ALL_PARTS_SHOWHIDE);
         SHORTCUT(PART_UNSELECT);
@@ -402,6 +404,10 @@ _default_shortcuts_add()
                  MOD_NONE, 119/*del*/);
    _add_shortcut(false, SHORTCUT_TYPE_STATE_NEXT, SHORTCUT_TYPE_NONE,
                  MOD_NONE, 39/*s*/);
+   _add_shortcut(false, SHORTCUT_TYPE_PART_NEXT, SHORTCUT_TYPE_NONE,
+                 MOD_NONE, 53/*x*/);
+   _add_shortcut(false, SHORTCUT_TYPE_PART_PREV, SHORTCUT_TYPE_NONE,
+                 MOD_NONE, 52/*z*/);
    _add_shortcut(false, SHORTCUT_TYPE_PART_SHOWHIDE, SHORTCUT_TYPE_NONE,
                  MOD_NONE, 43/*h*/);
    _add_shortcut(false, SHORTCUT_TYPE_ALL_PARTS_SHOWHIDE, SHORTCUT_TYPE_NONE,
diff --git a/src/bin/ui/shortcuts/shortcuts.h b/src/bin/ui/shortcuts/shortcuts.h
index e84b7ff..a442deb 100644
--- a/src/bin/ui/shortcuts/shortcuts.h
+++ b/src/bin/ui/shortcuts/shortcuts.h
@@ -85,6 +85,8 @@ typedef enum {
    SHORTCUT_TYPE_MODE_CODE,
    SHORTCUT_TYPE_MODE_DEMO,
    SHORTCUT_TYPE_STATE_NEXT,
+   SHORTCUT_TYPE_PART_NEXT,
+   SHORTCUT_TYPE_PART_PREV,
    SHORTCUT_TYPE_PART_SHOWHIDE,
    SHORTCUT_TYPE_ALL_PARTS_SHOWHIDE,
    SHORTCUT_TYPE_PART_UNSELECT,
diff --git a/src/bin/ui/tabs.c b/src/bin/ui/tabs.c
index 937f0ea..df84f17 100644
--- a/src/bin/ui/tabs.c
+++ b/src/bin/ui/tabs.c
@@ -650,6 +650,24 @@ _shortcut_state_next_cb(void *data __UNUSED__,
 }
 
 static void
+_shortcut_part_next_cb(void *data __UNUSED__,
+                       Evas_Object *obj __UNUSED__,
+                       void *event_info __UNUSED__)
+{
+   if (tabs.current_workspace)
+     workspace_part_next_request(tabs.current_workspace);
+}
+
+static void
+_shortcut_part_prev_cb(void *data __UNUSED__,
+                       Evas_Object *obj __UNUSED__,
+                       void *event_info __UNUSED__)
+{
+   if (tabs.current_workspace)
+     workspace_part_prev_request(tabs.current_workspace);
+}
+
+static void
 _shortcut_part_showhide_cb(void *data __UNUSED__,
                            Evas_Object *obj __UNUSED__,
                            void *event_info __UNUSED__)
@@ -983,6 +1001,8 @@ tabs_add(void)
    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_STATE_NEXT, 
_shortcut_state_next_cb, NULL);
+   evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_PART_NEXT, 
_shortcut_part_next_cb, NULL);
+   evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_PART_PREV, 
_shortcut_part_prev_cb, NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_PART_SHOWHIDE, 
_shortcut_part_showhide_cb, NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_PART_UNSELECT, 
_shortcut_part_unselect_cb, NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_SHORTCUT_ALL_PARTS_SHOWHIDE, 
_shortcut_all_parts_showhide_cb, NULL);
diff --git a/src/bin/ui/workspace/group_navigator.c 
b/src/bin/ui/workspace/group_navigator.c
index e310cef..9ed6cbb 100644
--- a/src/bin/ui/workspace/group_navigator.c
+++ b/src/bin/ui/workspace/group_navigator.c
@@ -1472,6 +1472,35 @@ _part_item_find(Part_List *pl, Part *part)
    return part_item;
 }
 
+static void
+_select_next_part(Part_List *pl, Eina_Bool reverse)
+{
+   Elm_Object_Item *part_item;
+   const Eina_List *part_items, *l = NULL;
+
+   assert(pl != NULL);
+
+   part_items = elm_genlist_item_subitems_get(pl->parts_caption_item);
+   if (pl->selected_part_item)
+     l = eina_list_data_find_list(part_items, pl->selected_part_item);
+   if (reverse)
+     {
+        if (eina_list_prev(l))
+          l = eina_list_prev(l);
+        else
+          l = eina_list_last(l);
+     }
+   else
+     {
+        if (eina_list_next(l))
+          l = eina_list_next(l);
+        else
+          l = part_items;
+     }
+   part_item = eina_list_data_get(l);
+   elm_genlist_item_selected_set(part_item, true);
+}
+
 void
 group_navigator_part_del(Evas_Object *obj, Part *part)
 {
@@ -2090,6 +2119,26 @@ group_navigator_state_next_request(Evas_Object *obj)
 }
 
 void
+group_navigator_part_next_request(Evas_Object *obj)
+{
+   Part_List *pl = evas_object_data_get(obj, GROUP_NAVIGATOR_DATA);
+
+   assert(pl != NULL);
+
+   _select_next_part(pl, false);
+}
+
+void
+group_navigator_part_prev_request(Evas_Object *obj)
+{
+   Part_List *pl = evas_object_data_get(obj, GROUP_NAVIGATOR_DATA);
+
+   assert(pl != NULL);
+
+   _select_next_part(pl, true);
+}
+
+void
 group_navigator_part_showhide_request(Evas_Object *obj)
 {
    Part_List *pl = evas_object_data_get(obj, GROUP_NAVIGATOR_DATA);
diff --git a/src/bin/ui/workspace/group_navigator.h 
b/src/bin/ui/workspace/group_navigator.h
index 0b04b02..b03105e 100644
--- a/src/bin/ui/workspace/group_navigator.h
+++ b/src/bin/ui/workspace/group_navigator.h
@@ -118,6 +118,12 @@ void
 group_navigator_state_next_request(Evas_Object *obj);
 
 void
+group_navigator_part_next_request(Evas_Object *obj);
+
+void
+group_navigator_part_prev_request(Evas_Object *obj);
+
+void
 group_navigator_part_showhide_request(Evas_Object *obj);
 
 void
diff --git a/src/bin/ui/workspace/workspace.c b/src/bin/ui/workspace/workspace.c
index 811baa9..c27e411 100644
--- a/src/bin/ui/workspace/workspace.c
+++ b/src/bin/ui/workspace/workspace.c
@@ -1380,6 +1380,22 @@ workspace_state_next_request(Evas_Object *obj)
 }
 
 void
+workspace_part_next_request(Evas_Object *obj)
+{
+   WS_DATA_GET(obj);
+
+   group_navigator_part_next_request(wd->group_navi);
+}
+
+void
+workspace_part_prev_request(Evas_Object *obj)
+{
+   WS_DATA_GET(obj);
+
+   group_navigator_part_prev_request(wd->group_navi);
+}
+
+void
 workspace_part_showhide_request(Evas_Object *obj)
 {
    WS_DATA_GET(obj);
diff --git a/src/bin/ui/workspace/workspace.h b/src/bin/ui/workspace/workspace.h
index d165c2f..4c2bb69 100644
--- a/src/bin/ui/workspace/workspace.h
+++ b/src/bin/ui/workspace/workspace.h
@@ -376,6 +376,12 @@ void
 workspace_state_next_request(Evas_Object *obj);
 
 void
+workspace_part_next_request(Evas_Object *obj);
+
+void
+workspace_part_prev_request(Evas_Object *obj);
+
+void
 workspace_part_showhide_request(Evas_Object *obj);
 
 void

-- 


Reply via email to