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 <michael.blumenkrantz@gmail.com>
Differential Revision: https://phab.enlightenment.org/D8011
This commit is contained in:
Marcel Hollerbach 2019-02-23 15:32:02 +01:00
parent a25444f0d5
commit ddb3bd7d21
5 changed files with 80 additions and 56 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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"

View File

@ -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; }

View File

@ -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_freeze_events_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Eina_Bool freeze)
_efl_canvas_object_efl_object_event_freeze(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);
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 Eina_Bool
_efl_canvas_object_freeze_events_get(const Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj)
EOLIAN void
_efl_canvas_object_efl_object_event_thaw(Eo *obj, Evas_Object_Protected_Data *pd)
{
return obj->freeze_events;
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));
}
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 (efl_event_freeze_count_get(eo_obj) > 0);
}
EOLIAN void