done. :)
------------------------------------
-Regards, Hermet-
-----Original Message-----
From: "Vincent Torri"<vto...@univ-evry.fr>
To: enlightenment-devel@lists.sourceforge.net
Cc: enlightenment-...@lists.sourceforge.net
Sent: 11-10-27(목) 20:56:12
Subject: Re: [E-devel] E SVN: hermet IN trunk/evas/src/lib: . canvas include
ChangeLog and @since
Vincent
On Thu, 27 Oct 2011, Enlightenment SVN wrote:
> Log:
> evas - added new API evas_object_freeze_events_set/get
>
> and will handle for the key events also soon.
>
>
>
> Author: hermet
> Date: 2011-10-27 03:36:09 -0700 (Thu, 27 Oct 2011)
> New Revision: 64432
> Trac: http://trac.enlightenment.org/e/changeset/64432
>
> Modified:
> trunk/evas/src/lib/Evas.h trunk/evas/src/lib/canvas/evas_events.c
> trunk/evas/src/lib/canvas/evas_object_smart.c
> trunk/evas/src/lib/include/evas_inline.x
> trunk/evas/src/lib/include/evas_private.h
>
> Modified: trunk/evas/src/lib/Evas.h
> ===================================================================
> --- trunk/evas/src/lib/Evas.h 2011-10-27 10:17:44 UTC (rev 64431)
> +++ trunk/evas/src/lib/Evas.h 2011-10-27 10:36:09 UTC (rev 64432)
> @@ -3922,6 +3922,7 @@
> * @see evas_object_pass_events_get() for an example
> * @see evas_object_repeat_events_set()
> * @see evas_object_propagate_events_set()
> + * @see evas_object_freeze_events_set()
> */
> EAPI void evas_object_pass_events_set (Evas_Object *obj, Eina_Bool pass)
> EINA_ARG_NONNULL(1);
>
> @@ -3942,6 +3943,7 @@
> * @see evas_object_pass_events_set()
> * @see evas_object_repeat_events_get()
> * @see evas_object_propagate_events_get()
> + * @see evas_object_freeze_events_get()
> */
> EAPI Eina_Bool evas_object_pass_events_get (const Evas_Object *obj)
> EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
>
> @@ -3967,8 +3969,9 @@
> * See the full @ref Example_Evas_Stacking "example".
> *
> * @see evas_object_repeat_events_get()
> - * @see evas_object_pass_events_get()
> - * @see evas_object_propagate_events_get()
> + * @see evas_object_pass_events_set()
> + * @see evas_object_propagate_events_set()
> + * @see evas_object_freeze_events_set()
> */
> EAPI void evas_object_repeat_events_set (Evas_Object *obj, Eina_Bool repeat)
> EINA_ARG_NONNULL(1);
>
> @@ -3980,8 +3983,9 @@
> * or not (@c EINA_FALSE)
> *
> * @see evas_object_repeat_events_set() for an example
> - * @see evas_object_pass_events_set()
> - * @see evas_object_propagate_events_set()
> + * @see evas_object_pass_events_get()
> + * @see evas_object_propagate_events_get()
> + * @see evas_object_freeze_events_get()
> */
> EAPI Eina_Bool evas_object_repeat_events_get (const Evas_Object *obj)
> EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
>
> @@ -4002,10 +4006,10 @@
> * not be propagated on to the smart object of which @p obj is a
> * member. The default value is @c EINA_TRUE.
> *
> - * @see evas_object_event_callback_add()
> * @see evas_object_propagate_events_get()
> - * @see evas_object_repeat_events_get()
> - * @see evas_object_pass_events_get()
> + * @see evas_object_repeat_events_set()
> + * @see evas_object_pass_events_set()
> + * @see evas_object_freeze_events_set()
> */
> EAPI void evas_object_propagate_events_set (Evas_Object *obj, Eina_Bool prop)
> EINA_ARG_NONNULL(1);
>
> @@ -4016,14 +4020,50 @@
> * @return whether @p obj is set to propagate events (@c EINA_TRUE)
> * or not (@c EINA_FALSE)
> *
> - * @see evas_object_event_callback_add()
> * @see evas_object_propagate_events_set()
> - * @see evas_object_repeat_events_set()
> - * @see evas_object_pass_events_set()
> + * @see evas_object_repeat_events_get()
> + * @see evas_object_pass_events_get()
> + * @see evas_object_freeze_events_get()
> */
> EAPI Eina_Bool evas_object_propagate_events_get (const Evas_Object *obj)
> EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
>
> /**
> + * Set whether an Evas object is to freeze (discard) events.
> + *
> + * @param obj the Evas object to operate on
> + * @param pass whether @p obj is to freeze events (@c EINA_TRUE) or not
> + * (@c EINA_FALSE)
> + *
> + * If @p freeze is @c EINA_TRUE, it will make events on @p obj to be @b
> + * discarded. Unlike evas_object_pass_events_set(), events will not be
> + * passed to @b next lower object. This API can be used for blocking
> + * events while @p obj is on transiting.
> + *
> + * If @p freeze is @c EINA_FALSE, events will be processed on that
> + * object as normal.
> + *
> + * @see evas_object_freeze_events_get()
> + * @see evas_object_pass_events_set()
> + * @see evas_object_repeat_events_set()
> + * @see evas_object_propagate_events_set()
> + */
> +EAPI void evas_object_freeze_events_set(Evas_Object *obj, Eina_Bool freeze)
> EINA_ARG_NONNULL(1);
> +
> +/**
> + * Determine whether an object is set to freeze (discard) events.
> + *
> + * @param obj the Evas object to get information from.
> + * @return freeze whether @p obj is set to freeze events (@c EINA_TRUE) or
> + * not (@c EINA_FALSE)
> + *
> + * @see evas_object_freeze_events_set()
> + * @see evas_object_pass_events_get()
> + * @see evas_object_repeat_events_get()
> + * @see evas_object_propagate_events_get()
> + */
> +EAPI Eina_Bool evas_object_freeze_events_get(const Evas_Object *obj)
> EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
> +
> +/**
> * @}
> */
>
>
> Modified: trunk/evas/src/lib/canvas/evas_events.c
> ===================================================================
> --- trunk/evas/src/lib/canvas/evas_events.c 2011-10-27 10:17:44 UTC (rev
> 64431)
> +++ trunk/evas/src/lib/canvas/evas_events.c 2011-10-27 10:36:09 UTC (rev
> 64432)
> @@ -90,7 +90,8 @@
> if (inside && ((!obj->precise_is_inside) ||
> (evas_object_is_inside(obj, x, y))))
> {
> - in = eina_list_append(in, obj);
> + if (!evas_event_freezes_through(obj))
> + in = eina_list_append(in, obj);
> if (!obj->repeat_events)
> {
> *no_rep = 1;
> @@ -229,8 +230,10 @@
> * get a new event list, otherwise, keep the current grabbed list. */
> if (e->pointer.mouse_grabbed == 0)
> {
> - Eina_List *ins;
> - ins = evas_event_objects_event_list(e, NULL, e->pointer.x, e->pointer.y);
> + Eina_List *ins = evas_event_objects_event_list(e,
> + NULL,
> + e->pointer.x,
> + e->pointer.y);
> /* free our old list of ins */
> e->pointer.object.in = eina_list_free(e->pointer.object.in);
> /* and set up the new one */
> @@ -248,7 +251,6 @@
> EINA_LIST_FOREACH(copy, l, obj)
> {
> if (obj->delete_me) continue;
> -
> ev.canvas.x = e->pointer.x;
> ev.canvas.y = e->pointer.y;
> _evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y,
> obj->mouse_grabbed);
> @@ -1376,6 +1378,40 @@
> }
>
> EAPI void
> +evas_object_freeze_events_set(Evas_Object *obj, Eina_Bool freeze)
> +{
> + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
> + return;
> + MAGIC_CHECK_END();
> +
> + freeze = !!freeze;
> + if (obj->freeze_events == freeze) return;
> + obj->freeze_events = freeze;
> + evas_object_smart_member_cache_invalidate(obj, EINA_FALSE, EINA_TRUE);
> + if (evas_object_is_in_output_rect(obj,
> + obj->layer->evas->pointer.x,
> + obj->layer->evas->pointer.y, 1, 1) &&
> + ((!obj->precise_is_inside) ||
> + (evas_object_is_inside(obj,
> + obj->layer->evas->pointer.x,
> + obj->layer->evas->pointer.y))))
> + evas_event_feed_mouse_move(obj->layer->evas,
> + obj->layer->evas->pointer.x,
> + obj->layer->evas->pointer.y,
> + obj->layer->evas->last_timestamp,
> + NULL);
> +}
> +
> +EAPI Eina_Bool
> +evas_object_freeze_events_get(const Evas_Object *obj)
> +{
> + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
> + return 0;
> + MAGIC_CHECK_END();
> + return obj->freeze_events;
> +}
> +
> +EAPI void
> evas_object_pass_events_set(Evas_Object *obj, Eina_Bool pass)
> {
> MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
> @@ -1384,7 +1420,7 @@
> pass = !!pass;
> if (obj->pass_events == pass) return;
> obj->pass_events = pass;
> - evas_object_smart_member_cache_invalidate(obj);
> + evas_object_smart_member_cache_invalidate(obj, EINA_TRUE, EINA_FALSE);
> if (evas_object_is_in_output_rect(obj,
> obj->layer->evas->pointer.x,
> obj->layer->evas->pointer.y, 1, 1) &&
>
> Modified: trunk/evas/src/lib/canvas/evas_object_smart.c
> ===================================================================
> --- trunk/evas/src/lib/canvas/evas_object_smart.c 2011-10-27 10:17:44 UTC
> (rev 64431)
> +++ trunk/evas/src/lib/canvas/evas_object_smart.c 2011-10-27 10:36:09 UTC
> (rev 64432)
> @@ -164,7 +164,7 @@
> obj->layer->usage++;
> obj->smart.parent = smart_obj;
> o->contained = eina_inlist_append(o->contained, EINA_INLIST_GET(obj));
> - evas_object_smart_member_cache_invalidate(obj);
> + evas_object_smart_member_cache_invalidate(obj, EINA_TRUE, EINA_TRUE);
> obj->restack = 1;
> evas_object_change(obj);
> evas_object_mapped_clip_across_mark(obj);
> @@ -191,7 +191,7 @@
> o = (Evas_Object_Smart *)(obj->smart.parent->object_data);
> o->contained = eina_inlist_remove(o->contained, EINA_INLIST_GET(obj));
> obj->smart.parent = NULL;
> - evas_object_smart_member_cache_invalidate(obj);
> + evas_object_smart_member_cache_invalidate(obj, EINA_TRUE, EINA_TRUE);
> obj->layer->usage--;
> obj->cur.layer = obj->layer->layer;
> evas_object_inject(obj, obj->layer->evas);
> @@ -751,7 +751,9 @@
> }
>
> void
> -evas_object_smart_member_cache_invalidate(Evas_Object *obj)
> +evas_object_smart_member_cache_invalidate(Evas_Object *obj,
> + Eina_Bool pass_events,
> + Eina_Bool freeze_events)
> {
> Evas_Object_Smart *o;
> Evas_Object *member;
> @@ -760,13 +762,18 @@
> return;
> MAGIC_CHECK_END();
>
> - obj->parent_cache.pass_events_valid = EINA_FALSE;
> + if (pass_events)
> + obj->parent_cache.pass_events_valid = EINA_FALSE;
> + if (freeze_events)
> + obj->parent_cache.freeze_events_valid = EINA_FALSE;
>
> o = obj->object_data;
> if (o->magic != MAGIC_OBJ_SMART) return;
>
> - EINA_INLIST_FOREACH(o->contained, member);
> - evas_object_smart_member_cache_invalidate(member);
> + EINA_INLIST_FOREACH(o->contained, member)
> + evas_object_smart_member_cache_invalidate(member,
> + pass_events,
> + freeze_events);
> }
>
> void
>
> Modified: trunk/evas/src/lib/include/evas_inline.x
> ===================================================================
> --- trunk/evas/src/lib/include/evas_inline.x 2011-10-27 10:17:44 UTC (rev
> 64431)
> +++ trunk/evas/src/lib/include/evas_inline.x 2011-10-27 10:36:09 UTC (rev
> 64432)
> @@ -70,6 +70,22 @@
> return 0;
> }
>
> +static inline Eina_Bool
> +evas_event_freezes_through(Evas_Object *obj)
> +{
> + if (obj->freeze_events) return EINA_TRUE;
> + if (obj->parent_cache.freeze_events_valid)
> + return obj->parent_cache.freeze_events;
> + if (obj->smart.parent)
> + {
> + Eina_Bool freeze = evas_event_freezes_through(obj->smart.parent);
> + obj->parent_cache.freeze_events_valid = EINA_TRUE;
> + obj->parent_cache.freeze_events = freeze;
> + return freeze;
> + }
> + return EINA_FALSE;
> +}
> +
> static inline int
> evas_event_passes_through(Evas_Object *obj)
> {
>
> Modified: trunk/evas/src/lib/include/evas_private.h
> ===================================================================
> --- trunk/evas/src/lib/include/evas_private.h 2011-10-27 10:17:44 UTC (rev
> 64431)
> +++ trunk/evas/src/lib/include/evas_private.h 2011-10-27 10:36:09 UTC (rev
> 64432)
> @@ -580,11 +580,14 @@
>
> Eina_Bool store : 1;
> Eina_Bool pass_events : 1;
> + Eina_Bool freeze_events : 1;
> + Eina_Bool repeat_events : 1;
> struct {
> Eina_Bool pass_events : 1;
> Eina_Bool pass_events_valid : 1;
> + Eina_Bool freeze_events : 1;
> + Eina_Bool freeze_events_valid : 1;
> } parent_cache;
> - Eina_Bool repeat_events : 1;
> Eina_Bool restack : 1;
> Eina_Bool is_active : 1;
> Eina_Bool precise_is_inside : 1;
> @@ -978,7 +981,7 @@
> Evas_Font_Description *evas_font_desc_ref(Evas_Font_Description *fdesc);
> void * evas_font_load(Evas *evas, Evas_Font_Description *fdesc, const char
> *source, Evas_Font_Size size);
> void evas_font_load_hinting_set(Evas *evas, void *font, int hinting);
> -void evas_object_smart_member_cache_invalidate(Evas_Object *obj);
> +void evas_object_smart_member_cache_invalidate(Evas_Object *obj, Eina_Bool
> pass_events, Eina_Bool freeze_events);
> void evas_text_style_pad_get(Evas_Text_Style_Type style, int *l, int *r, int
> *t, int *b);
> void _evas_object_text_rehint(Evas_Object *obj);
> void _evas_object_textblock_rehint(Evas_Object *obj);
>
>
> ------------------------------------------------------------------------------
> The demand for IT networking professionals continues to grow, and the
> demand for specialized networking skills is growing even more rapidly.
> Take a complimentary Learning@Cisco Self-Assessment and learn
> about Cisco certifications, training, and career opportunities.
> http://p.sf.net/sfu/cisco-dev2dev
> _______________________________________________
> enlightenment-svn mailing list
> enlightenment-...@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-svn
>
>
------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn
about Cisco certifications, training, and career opportunities.
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn
about Cisco certifications, training, and career opportunities.
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel