elementary/naviframe - added rect to block the events
authorhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 4 Oct 2011 06:30:38 +0000 (06:30 +0000)
committerhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 4 Oct 2011 06:30:38 +0000 (06:30 +0000)
Need to consider to provide any mechanism to users such as evas_object_events_freeze/thaw.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@63791 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elc_naviframe.c

index fa1594b..66f0fe4 100644 (file)
@@ -10,6 +10,7 @@ struct _Widget_Data
 {
    Eina_List    *stack;
    Evas_Object  *base;
+   Evas_Object  *rect;
    Eina_Bool     preserve: 1;
    Eina_Bool     pass_events: 1;
 };
@@ -79,6 +80,7 @@ static void _resize(void *data,
                     Evas *e,
                     Evas_Object *obj,
                     void *event_info);
+static void _hide(void *data, Evas *e, Evas_Object *obj, void *event_info);
 static void _title_clicked(void *data, Evas_Object *obj,
                            const char *emission,
                            const char *source);
@@ -396,6 +398,13 @@ _move(void *data __UNUSED__,
       Evas_Object *obj,
       void *event_info __UNUSED__)
 {
+   Evas_Coord x, y;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+
+   evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+   evas_object_move(wd->rect, x, y);
+
    _sizing_eval(obj);
 }
 
@@ -405,10 +414,29 @@ _resize(void *data __UNUSED__,
         Evas_Object *obj,
         void *event_info __UNUSED__)
 {
+   Evas_Coord w, h;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+
+   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+   evas_object_resize(wd->rect, w, h);
+
    _sizing_eval(obj);
 }
 
 static void
+_hide(void *data __UNUSED__,
+      Evas *e __UNUSED__,
+      Evas_Object *obj,
+      void *event_info __UNUSED__)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   if (wd->pass_events)
+     evas_object_hide(wd->rect);
+}
+
+static void
 _title_clicked(void *data,
                Evas_Object *obj __UNUSED__,
                const char *emission __UNUSED__,
@@ -661,7 +689,11 @@ _show_finished(void *data,
                                    SIG_TRANSITION_FINISHED,
                                    (void *) EINA_TRUE);
    if (wd->pass_events)
-     evas_object_pass_events_set(wd->base, EINA_FALSE);
+     {
+        evas_object_hide(wd->rect);
+        //FIXME:
+        evas_object_pass_events_set(wd->base, EINA_FALSE);
+     }
 }
 
 static void
@@ -711,8 +743,14 @@ elm_naviframe_add(Evas_Object *parent)
    elm_widget_resize_object_set(obj, wd->base);
    _elm_theme_object_set(obj, wd->base, "naviframe", "base", "default");
 
+   //rect:
+   wd->rect = evas_object_rectangle_add(e);
+   evas_object_color_set(wd->rect, 0, 0, 0, 0);
+   elm_widget_sub_object_add(obj, wd->rect);
+
    evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move, obj);
    evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, obj);
+   evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, _hide, obj);
    evas_object_smart_callbacks_descriptions_set(obj, _signals);
 
    wd->pass_events = EINA_TRUE;
@@ -795,7 +833,11 @@ elm_naviframe_item_push(Evas_Object *obj,
    if (prev_it)
      {
         if (wd->pass_events)
-          evas_object_pass_events_set(wd->base, EINA_TRUE);
+          {
+             evas_object_show(wd->rect);
+             //FIXME:
+             evas_object_pass_events_set(wd->base, EINA_TRUE);
+          }
         edje_object_signal_emit(prev_it->base.view,
                                 "elm,state,pushed",
                                 "elm");
@@ -832,7 +874,11 @@ elm_naviframe_item_pop(Evas_Object *obj)
    if (prev_it)
      {
         if (wd->pass_events)
-          evas_object_pass_events_set(wd->base, EINA_TRUE);
+          {
+             evas_object_show(wd->rect);
+             //FIXME:
+             evas_object_pass_events_set(wd->base, EINA_TRUE);
+          }
         evas_object_show(prev_it->base.view);
         evas_object_raise(prev_it->base.view);
         edje_object_signal_emit(prev_it->base.view,