static Evry_State *_evry_state_new(Evry_Selector *sel, Eina_List *plugins);
static void _evry_state_pop(Evry_Selector *sel);
+static int _evry_selectors_shift(int dir);
static Evry_Selector *_evry_selector_new(Evry_Window *win, int type);
static void _evry_selector_free(Evry_Selector *sel);
static void _evry_selector_activate(Evry_Selector *sel);
static int _evry_cb_key_down(void *data, int type, void *event);
static int _evry_cb_selection_notify(void *data, int type, void *event);
+
/* local subsystem globals */
static Evry_Window *win = NULL;
static Ecore_X_Window input_window = 0;
return 0;
}
-static int
-_evry_selectors_shift()
-{
- void *new_sel;
- Evry_Selector *sel;
- Evry_State *s;
-
- if ((new_sel = realloc(win->sel_list, sizeof(Evry_Selector*) * 6)))
- {
- win->sel_list = new_sel;
-
- edje_object_part_unswallow(win->o_main, win->sel_list[0]->o_main);
- evas_object_hide(win->sel_list[0]->o_main);
- edje_object_part_unswallow(win->o_main, win->sel_list[1]->o_main);
- evas_object_hide(win->sel_list[1]->o_main);
- edje_object_part_unswallow(win->o_main, win->sel_list[2]->o_main);
-
- edje_object_signal_emit(win->o_main, "e,state,object_selector_hide", "e");
-
- win->sel_list[5] = NULL;
- win->selectors = win->sel_list + 2;
- _evry_selector_new(win, EVRY_PLUGIN_ACTION);
- _evry_selector_new(win, EVRY_PLUGIN_OBJECT);
-
- win->selector = win->selectors[0];
- sel = win->selector;
-
- edje_object_part_swallow(win->o_main, "e.swallow.subject_selector",
- sel->o_main);
-
- edje_object_signal_emit(sel->o_main, "e,state,selected", "e");
- /* was checked before. anyway */
- if ((s = sel->state) && (s->cur_item))
- _evry_selector_update_actions(sel);
-
- win->level++;
- }
- return 1;
-}
-
int
evry_show(E_Zone *zone, const char *params)
{
return;
}
- if (win->level > 0)
+ if (_evry_selectors_shift(-1))
+ {
+ return;
+ }
+
+ if (win->show_timer)
+ ecore_timer_del(win->show_timer);
+
+ win->visible = EINA_FALSE;
+
+ for (i = 0; win->sel_list[i]; i++)
+ _evry_selector_free(win->sel_list[i]);
+
+ E_FREE(win->sel_list);
+
+ EINA_LIST_FREE(win->handlers, ev)
+ ecore_event_handler_del(ev);
+
+ _evry_window_free(win);
+ win = NULL;
+
+ ecore_x_window_free(input_window);
+ e_grabinput_release(input_window, input_window);
+ input_window = 0;
+
+ evry_history_unload();
+}
+
+static int
+_evry_selectors_shift(int dir)
+{
+ if (dir > 0)
{
+ void *new_sel;
Evry_Selector *sel;
+ Evry_State *s;
+
+ if (!(new_sel = realloc(win->sel_list, sizeof(Evry_Selector*) * 6)))
+ return 0;
+
+ win->sel_list = new_sel;
+
+ edje_object_part_unswallow(win->o_main, win->sel_list[0]->o_main);
+ evas_object_hide(win->sel_list[0]->o_main);
+ edje_object_part_unswallow(win->o_main, win->sel_list[1]->o_main);
+ evas_object_hide(win->sel_list[1]->o_main);
+ edje_object_part_unswallow(win->o_main, win->sel_list[2]->o_main);
+
+ edje_object_signal_emit(win->o_main, "e,state,object_selector_hide", "e");
+
+ win->sel_list[5] = NULL;
+ win->selectors = win->sel_list + 2;
+ _evry_selector_new(win, EVRY_PLUGIN_ACTION);
+ _evry_selector_new(win, EVRY_PLUGIN_OBJECT);
+
+ win->selector = win->selectors[0];
+ sel = win->selector;
+
+ edje_object_part_swallow(win->o_main, "e.swallow.subject_selector",
+ sel->o_main);
+
+ edje_object_signal_emit(sel->o_main, "e,state,selected", "e");
+ /* was checked before. anyway */
+ if ((s = sel->state) && (s->cur_item))
+ _evry_selector_update_actions(sel);
+
+ win->level++;
+
+ return 1;
+ }
+ else if ((dir < 0) && (win->level > 0))
+ {
_evry_selector_free(win->selectors[1]);
_evry_selector_free(win->selectors[2]);
edje_object_part_unswallow(win->o_main, win->selectors[0]->o_main);
- win->selectors = win->sel_list; //-= 2;
+ win->selectors = win->sel_list;
win->sel_list[3] = NULL;
win->selector = NULL;
"e.swallow.object_selector",
win->selectors[2]->o_main);
win->level = 0;
- return;
- }
-
- if (win->show_timer)
- ecore_timer_del(win->show_timer);
-
- win->visible = EINA_FALSE;
-
- for (i = 0; win->sel_list[i]; i++)
- _evry_selector_free(win->sel_list[i]);
- E_FREE(win->sel_list);
-
- EINA_LIST_FREE(win->handlers, ev)
- ecore_event_handler_del(ev);
-
- _evry_window_free(win);
- win = NULL;
-
- ecore_x_window_free(input_window);
- e_grabinput_release(input_window, input_window);
- input_window = 0;
+ return 1;
+ }
- evry_history_unload();
+ return 0;
}
EAPI void