refactor
authorHannes Janetzek <hannes.janetzek@gmail.com>
Sun, 16 May 2010 03:22:17 +0000 (03:22 +0000)
committerHannes Janetzek <hannes.janetzek@gmail.com>
Sun, 16 May 2010 03:22:17 +0000 (03:22 +0000)
SVN revision: 48908

src/modules/everything/evry.c

index 8d404f1..c971bea 100644 (file)
@@ -26,6 +26,7 @@ static int  _evry_cb_update_timer(void *data);
 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);
@@ -57,6 +58,7 @@ static void _evry_item_sel(Evry_State *s, Evry_Item *it);
 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;
@@ -127,46 +129,6 @@ _cb_show_timer(void *data)
    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)
 {
@@ -307,15 +269,84 @@ evry_hide(int clear)
        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;
 
@@ -338,30 +369,11 @@ evry_hide(int clear)
                                 "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