bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=ddb3bd7d210fd4dfeaed848f5fc15de3c94af18c

commit ddb3bd7d210fd4dfeaed848f5fc15de3c94af18c
Author: Marcel Hollerbach <[email protected]>
Date:   Sat Feb 23 15:32:02 2019 +0100

    efl_canvas_object: remove event_freeze
    
    this is now done via Efl.Object.event_freeze / Efl.Object.event_thaw.
    
    ref T7555
    
    Reviewed-by: Mike Blumenkrantz <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D8011
---
 src/lib/elementary/efl_ui_stack.c         |  7 ++---
 src/lib/elementary/efl_ui_stack_private.h |  1 -
 src/lib/evas/Evas_Legacy.h                | 36 ++++++++++++++++++++++++
 src/lib/evas/canvas/efl_canvas_object.eo  | 44 ++++-------------------------
 src/lib/evas/canvas/evas_events.c         | 46 +++++++++++++++++++++++--------
 5 files changed, 79 insertions(+), 55 deletions(-)

diff --git a/src/lib/elementary/efl_ui_stack.c 
b/src/lib/elementary/efl_ui_stack.c
index 45f0bed6d4..8356b97df4 100644
--- a/src/lib/elementary/efl_ui_stack.c
+++ b/src/lib/elementary/efl_ui_stack.c
@@ -102,7 +102,7 @@ _content_data_del(Content_Data *cd)
 static void
 _anim_started_cb(void *data EINA_UNUSED, const Efl_Event *event)
 {
-   
efl_canvas_object_freeze_events_set(efl_animation_player_target_get(event->object),
 EINA_TRUE);
+   efl_event_freeze(efl_animation_player_target_get(event->object));
 }
 
 static Evas_Object*
@@ -110,7 +110,7 @@ _end_anim(Transit_Data *td)
 {
    Efl_Canvas_Object *content = td->cd->content;
 
-   efl_canvas_object_freeze_events_set(content, td->freeze_events);
+   efl_event_thaw(content);
    td->cd->on_pushing = EINA_FALSE;
    td->cd->on_popping = EINA_FALSE;
    free(td);
@@ -159,8 +159,6 @@ _show_content_with_anim(Efl_Ui_Stack *obj, 
Efl_Ui_Stack_Data *pd, Content_Data *
 
    Transit_Data *td = calloc(1, sizeof(Transit_Data));
    td->cd = cd;
-   td->freeze_events =
-      efl_canvas_object_freeze_events_get(cd->content);
    pd->show_td = td;
 
    /* efl_ui_widget_resize_object_set() calls efl_gfx_entity_visible_set()
@@ -184,7 +182,6 @@ _hide_content_with_anim(Efl_Ui_Stack *obj EINA_UNUSED, 
Efl_Ui_Stack_Data *pd, Co
 
    Transit_Data *td = calloc(1, sizeof(Transit_Data));
    td->cd = cd;
-   td->freeze_events = efl_canvas_object_freeze_events_get(cd->content);
    pd->hide_td = td;
 
    efl_player_start(pd->hide);
diff --git a/src/lib/elementary/efl_ui_stack_private.h 
b/src/lib/elementary/efl_ui_stack_private.h
index b6b32f8e6e..f3d3b7a7c4 100644
--- a/src/lib/elementary/efl_ui_stack_private.h
+++ b/src/lib/elementary/efl_ui_stack_private.h
@@ -17,7 +17,6 @@ typedef struct _Transit_Data Transit_Data;
 struct _Transit_Data
 {
    Content_Data *cd;
-   Eina_Bool     freeze_events;
 };
 
 typedef struct _Efl_Ui_Stack_Data Efl_Ui_Stack_Data;
diff --git a/src/lib/evas/Evas_Legacy.h b/src/lib/evas/Evas_Legacy.h
index c83eac94e8..36c669db34 100644
--- a/src/lib/evas/Evas_Legacy.h
+++ b/src/lib/evas/Evas_Legacy.h
@@ -8121,6 +8121,42 @@ EAPI void 
evas_object_is_frame_object_set(Efl_Canvas_Object *obj, Eina_Bool is_f
  */
 EAPI Eina_Bool evas_object_is_frame_object_get(const Efl_Canvas_Object *obj);
 
+/**
+ * @brief Set whether an Evas object is to freeze (discard) events.
+ *
+ * If @c freeze is @c true, it will force events on @c obj to be discarded.
+ * Unlike @ref evas_object_pass_events_set, events will not be passed to next
+ * lower object. This API can be used for blocking events while @c obj is in
+ * transition.
+ *
+ * If @c freeze is @c false, events will be processed on that object as normal.
+ *
+ * @warning If you block only key/mouse up events with this API, you can't be
+ * sure of the state of any objects that have only key/mouse down events.
+ *
+ * @param[in] obj The object.
+ * @param[in] freeze Pass when @c obj is to freeze events ($true) or not
+ * ($false).
+ *
+ * @since 1.1
+ *
+ * @ingroup Evas_Object_Group
+ */
+EAPI void evas_object_freeze_events_set(Efl_Canvas_Object *obj, Eina_Bool 
freeze);
+
+/**
+ * @brief Determine whether an object is set to freeze (discard) events.
+ *
+ * @param[in] obj The object.
+ *
+ * @return Pass when @c obj is to freeze events ($true) or not ($false).
+ *
+ * @since 1.1
+ *
+ * @ingroup Evas_Object_Group
+ */
+EAPI Eina_Bool evas_object_freeze_events_get(const Efl_Canvas_Object *obj);
+
 #include "canvas/efl_canvas_event_grabber.eo.legacy.h"
 
 #include "canvas/efl_canvas_animation_alpha.eo.legacy.h"
diff --git a/src/lib/evas/canvas/efl_canvas_object.eo 
b/src/lib/evas/canvas/efl_canvas_object.eo
index f66b6ac1f8..e97c0195a3 100644
--- a/src/lib/evas/canvas/efl_canvas_object.eo
+++ b/src/lib/evas/canvas/efl_canvas_object.eo
@@ -86,36 +86,6 @@ abstract @beta Efl.Canvas.Object extends Efl.Loop_Consumer 
implements Efl.Gfx.En
             render_op: Efl.Gfx.Render_Op; [[Blend or copy.]]
          }
       }
-      @property freeze_events {
-         set {
-            [[Set whether an Evas object is to freeze (discard) events.
-
-              If $freeze is $true, it will force events on $obj to be
-              discarded. Unlike @.pass_events.set, events will not be
-              passed to next lower object. This API can be used for
-              blocking events while $obj is in transition.
-
-              If $freeze is $false, events will be processed on that
-              object as normal.
-
-              Warning: If you block only key/mouse up events with this API,
-              you can't be sure of the state of any objects that have only
-              key/mouse down events.
-
-              @since 1.1
-            ]]
-         }
-         get {
-            [[Determine whether an object is set to freeze (discard) events.
-
-              @since 1.1
-            ]]
-         }
-         values {
-            freeze: bool; [[Pass when $obj is to freeze events ($true)
-                            or not ($false).]]
-         }
-      }
       @property clip {
          set {
             [[Clip one object to another.
@@ -315,15 +285,13 @@ abstract @beta Efl.Canvas.Object extends 
Efl.Loop_Consumer implements Efl.Gfx.En
               be propagated on to the smart object of which $obj is a
               member. The default value is $true.
 
-              See also @.repeat_events.set, @.pass_events.set,
-              @.freeze_events.set.
+              See also @.repeat_events.set, @.pass_events.set.
             ]]
          }
          get {
             [[Retrieve whether an Evas object is set to propagate events.
 
-              See also @.repeat_events.get, @.pass_events.get,
-              @.freeze_events.get.
+              See also @.repeat_events.get, @.pass_events.get.
             ]]
          }
          values {
@@ -342,15 +310,13 @@ abstract @beta Efl.Canvas.Object extends 
Efl.Loop_Consumer implements Efl.Gfx.En
               If $pass is $false events will be processed on that object
               as normal.
 
-              See also @.repeat_events.set, @.propagate_events.set,
-              @.freeze_events.set.
+              See also @.repeat_events.set, @.propagate_events.set
             ]]
          }
          get {
             [[Determine whether an object is set to pass (ignore) events.
 
-              See also @.repeat_events.get, @.propagate_events.get,
-              @.freeze_events.get.
+              See also @.repeat_events.get, @.propagate_events.get.
             ]]
             /* FIXME-doc
             Example:
@@ -561,6 +527,8 @@ abstract @beta Efl.Canvas.Object extends Efl.Loop_Consumer 
implements Efl.Gfx.En
       Efl.Object.invalidate;
       Efl.Object.destructor;
       Efl.Object.provider_find;
+      Efl.Object.event_freeze;
+      Efl.Object.event_thaw;
       Efl.Object.debug_name_override;
       Efl.Gfx.Entity.visible { get; set; }
       Efl.Gfx.Color.color { get; set; }
diff --git a/src/lib/evas/canvas/evas_events.c 
b/src/lib/evas/canvas/evas_events.c
index 06d6923e6c..2a7c017fda 100644
--- a/src/lib/evas/canvas/evas_events.c
+++ b/src/lib/evas/canvas/evas_events.c
@@ -3715,23 +3715,47 @@ _feed_mouse_move_eval_internal(Eo *eo_obj, 
Evas_Object_Protected_Data *obj)
                                              evas->last_timestamp, NULL);
      }
 }
+EOLIAN void
+_efl_canvas_object_efl_object_event_freeze(Eo *obj, Evas_Object_Protected_Data 
*pd)
+{
+   efl_event_freeze(efl_super(obj, EFL_CANVAS_OBJECT_CLASS));
+   if (efl_event_freeze_count_get(obj) == 1)
+     {
+        pd->freeze_events = EINA_TRUE;
+        evas_object_smart_member_cache_invalidate(obj, EINA_FALSE, EINA_TRUE,
+                                                  EINA_FALSE);
+     }
+}
 
 EOLIAN void
-_efl_canvas_object_freeze_events_set(Eo *eo_obj, Evas_Object_Protected_Data 
*obj, Eina_Bool freeze)
+_efl_canvas_object_efl_object_event_thaw(Eo *obj, Evas_Object_Protected_Data 
*pd)
 {
-   freeze = !!freeze;
-   if (obj->freeze_events == freeze) return;
-   obj->freeze_events = freeze;
-   evas_object_smart_member_cache_invalidate(eo_obj, EINA_FALSE, EINA_TRUE,
-                                             EINA_FALSE);
-   if (obj->freeze_events) return;
-   _feed_mouse_move_eval_internal(eo_obj, obj);
+   if (efl_event_freeze_count_get(obj) == 1)
+     {
+        pd->freeze_events = EINA_FALSE;
+        evas_object_smart_member_cache_invalidate(obj, EINA_FALSE, EINA_TRUE,
+                                                  EINA_FALSE);
+        _feed_mouse_move_eval_internal(obj, pd);
+     }
+   efl_event_thaw(efl_super(obj, EFL_CANVAS_OBJECT_CLASS));
 }
 
-EOLIAN Eina_Bool
-_efl_canvas_object_freeze_events_get(const Eo *eo_obj EINA_UNUSED, 
Evas_Object_Protected_Data *obj)
+EAPI void
+evas_object_freeze_events_set(Eo *eo_obj, Eina_Bool freeze)
+{
+   if (freeze)
+     efl_event_freeze(eo_obj);
+   else
+     // The following check is needed, as eo does not accept more thaw calls 
than freeze calls.
+     // However, evas legacy stuff accepted multiple flase sets
+     if (efl_event_freeze_count_get(eo_obj) > 0)
+       efl_event_thaw(eo_obj);
+}
+
+EAPI Eina_Bool
+evas_object_freeze_events_get(const Eo *eo_obj EINA_UNUSED)
 {
-   return obj->freeze_events;
+   return (efl_event_freeze_count_get(eo_obj) > 0);
 }
 
 EOLIAN void

-- 


Reply via email to