this is now done via Efl.Object.event_freeze / Efl.Object.event_thaw.
ref T7555
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Differential Revision: https://phab.enlightenment.org/D8011
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*
{
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);
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()
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);
struct _Transit_Data
{
Content_Data *cd;
- Eina_Bool freeze_events;
};
typedef struct _Efl_Ui_Stack_Data Efl_Ui_Stack_Data;
*/
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);
+
/*********************************************************************************
* TIZEN_ONLY(20171110): Import TIZEN_ONLY functions for
* Edje textblock/text calculation/ellipsize feature.
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.
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 {
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:
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; }
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