I find this quite useless... what's the use case for that?
On Thu, Sep 12, 2013 at 11:24 AM, ChunEon Park - Enlightenment Git <no-re...@enlightenment.org> wrote: > hermet pushed a commit to branch master. > > commit 1dcd32068b6690c4b474dd79aa82fa34e566eae6 > Author: ChunEon Park <her...@hermet.pe.kr> > Date: Thu Sep 12 23:24:02 2013 +0900 > > elementary - introduces 3 apis elm_object_item_track/untrack/track_get(). > --- > ChangeLog | 5 ++ > NEWS | 1 + > src/examples/Makefile.am | 6 ++- > src/lib/elm_main.c | 19 +++++++ > src/lib/elm_object_item.h | 73 ++++++++++++++++++++++++++ > src/lib/elm_widget.c | 129 > ++++++++++++++++++++++++++++++++++++++++++++++ > src/lib/elm_widget.h | 5 ++ > 7 files changed, 236 insertions(+), 2 deletions(-) > > diff --git a/ChangeLog b/ChangeLog > index 973c714..4eced13 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1611,3 +1611,8 @@ > 2013-09-12 Ryuan Choi (ryuan) > > * elc_fileselector : Added "selected,invalid" smart callbacks. > + > +2013-09-12 ChunEon Park (Hermet) > + > + * elm_object_item : Introduces new APIs, elm_object_item_track(), > + elm_object_item_untrack(), elm_object_item_track_get(). > diff --git a/NEWS b/NEWS > index 029433f..78c1369 100644 > --- a/NEWS > +++ b/NEWS > @@ -89,6 +89,7 @@ Additions: > * Add elm_table_child_get(). > * Add support for flip focus direction. > * Add "selected,invalid" smart callback for fileselector. > + * elm_object_item : Introduces new APIs, elm_object_item_track(), > elm_object_item_untrack(), elm_object_item_track_get(). > > Improvements: > > diff --git a/src/examples/Makefile.am b/src/examples/Makefile.am > index 07b29de..32beda8 100644 > --- a/src/examples/Makefile.am > +++ b/src/examples/Makefile.am > @@ -148,7 +148,8 @@ transit_example_03.c \ > transit_example_04.c \ > web_example_01.c \ > web_example_02.c \ > -win_example.c > +win_example.c \ > +track_example_01.c > > .edc.edj: > $(EDJE_CC) $(EDJE_FLAGS) $< $@ > @@ -286,7 +287,8 @@ transit_example_03 \ > transit_example_04 \ > web_example_01 \ > web_example_02 \ > -win_example > +win_example \ > +track_example_01.c > > if ELEMENTARY_WINDOWS_BUILD > efl_thread_1_SOURCES = efl_thread_win32_1.c > diff --git a/src/lib/elm_main.c b/src/lib/elm_main.c > index 17654c6..f3c9a1f 100644 > --- a/src/lib/elm_main.c > +++ b/src/lib/elm_main.c > @@ -1899,3 +1899,22 @@ elm_object_item_cursor_engine_only_get(const > Elm_Object_Item *it) > { > return elm_widget_item_cursor_engine_only_get(it); > } > + > +EAPI Evas_Object * > +elm_object_item_track(Elm_Object_Item *it) > +{ > + return elm_widget_item_track((Elm_Widget_Item *)it); > +} > + > +void > +elm_object_item_untrack(Elm_Object_Item *it) > +{ > + elm_widget_item_untrack((Elm_Widget_Item *)it); > +} > + > +int > +elm_object_item_track_get(const Elm_Object_Item *it) > +{ > + return elm_widget_item_track_get((Elm_Widget_Item *)it); > +} > + > diff --git a/src/lib/elm_object_item.h b/src/lib/elm_object_item.h > index 8a0ccde..cce8f8d 100644 > --- a/src/lib/elm_object_item.h > +++ b/src/lib/elm_object_item.h > @@ -652,3 +652,76 @@ EAPI void > elm_object_item_cursor_engine_only_set(Elm_Obj > * @ingroup General > */ > EAPI Eina_Bool > elm_object_item_cursor_engine_only_get(const Elm_Object_Item *it); > + > +/** > + * This returns track object of the item. > + * > + * @param it The Elementary Object Item to be tracked. > + * @return The track object. > + * > + * @note This gets a rectangle object that represents the object item's > internal > + * object. If you wanna check the geometry, visibility of the item, you > + * can call the evas apis such as evas_object_geometry_get(), > + * evas_object_visible_get() to the track object. Note that all of the > + * widget items may/may not have the internal object so this api may > + * return @c NULL if the widget item doesn't have it. Additionally, the > + * widget item is managed/controlled by the widget, the widget item > could > + * be changed(moved, resized even deleted) anytime by it's own widget's > + * decision. So please dont' change the track object as well as don't > + * keep the track object in your side as possible but get the track > object > + * at the moment you need to refer. Otherwise, you need to add some > + * callbacks to the track object to track it's attributes changes. > + * > + * @warning After use the track object, please call the > + * elm_object_item_untrack() paired to elm_object_item_track() > + * definitely to free the track object properly. Don't delete the > + * track object. > + * > + * @see elm_object_item_untrack() > + * @see elm_object_item_track_get() > + * > + * @since 1.8 > + * > + * @ingroup General > + */ > +EAPI Evas_Object *elm_object_item_track(Elm_Object_Item *it); > + > +/** > + * This retrieve the track object of the item. > + * > + * @param it The Elementary Object Item that returned track object. > + * > + * @note This retrieves the track object that was returned from > + * elm_object_item_track(). > + * > + * @see elm_object_item_track() > + * @see elm_object_item_track_get() > + * > + * @since 1.8 > + * > + * @ingroup General > + */ > +EAPI void elm_object_item_untrack(Elm_Object_Item > *it); > + > +/** > + * Get the track object reference count. > + * > + * @param it The Elementary Object Item that returned track object. > + * > + * @note This gets the reference count for the track object. Whenever you > call > + * the elm_object_item_track(), the reference count will be increased > by > + * one. Likely the referece count will be decreased again when you call > + * the elm_object_item_untrack(). Unless the reference count reaches to > + * zero, the track object won't be deleted. So please be sure to call > + * elm_object_item_untrack() paired to the elm_object_item_track() call > + * count. > + * > + * @see elm_object_item_track() > + * @see elm_object_item_track_get() > + * > + * @since 1.8 > + * > + * @ingroup General > + */ > +EAPI int elm_object_item_track_get(const > Elm_Object_Item *it); > + > diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c > index c94f894..1aa2bbc 100644 > --- a/src/lib/elm_widget.c > +++ b/src/lib/elm_widget.c > @@ -4867,6 +4867,68 @@ _elm_widget_orientation_set(Eo *obj __UNUSED__, void > *_pd, va_list *list) > if (ret) *ret = EINA_TRUE; > } > > +static void > +_track_obj_del(void *data, Evas *e, Evas_Object *obj, void *event_info); > + > +static void > +_track_obj_update(Evas_Object *track, Evas_Object *obj) > +{ > + //Geometry > + Evas_Coord x, y, w, h; > + evas_object_geometry_get(obj, &x, &y, &w, &h); > + evas_object_move(track, x, y); > + evas_object_resize(track, w, h); > + > + //Visibility > + if (evas_object_visible_get(obj)) evas_object_show(track); > + else evas_object_hide(track); > +} > + > +static void > +_track_obj_view_update(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, > + void *event_info EINA_UNUSED) > +{ > + Evas_Object *track = data; > + _track_obj_update(track, obj); > +} > + > +static void > +_track_obj_view_del(void *data, Evas *e EINA_UNUSED, > + Evas_Object *obj EINA_UNUSED, void *event_info > EINA_UNUSED) > +{ > + Elm_Widget_Item *item = data; > + > + while (evas_object_ref_get(item->track_obj) > 0) > + evas_object_unref(item->track_obj); > + > + evas_object_event_callback_del(item->track_obj, EVAS_CALLBACK_DEL, > + _track_obj_del); > + evas_object_del(item->track_obj); > + item->track_obj = NULL; > +} > + > +static void > +_track_obj_del(void *data, Evas *e EINA_UNUSED, > + Evas_Object *obj EINA_UNUSED, void *event_info > EINA_UNUSED) > +{ > + Elm_Widget_Item *item = data; > + item->track_obj = NULL; > + > + if (!item->view) return; > + > + evas_object_event_callback_del(item->view, EVAS_CALLBACK_RESIZE, > + _track_obj_view_update); > + evas_object_event_callback_del(item->view, EVAS_CALLBACK_MOVE, > + _track_obj_view_update); > + evas_object_event_callback_del(item->view, EVAS_CALLBACK_SHOW, > + _track_obj_view_update); > + evas_object_event_callback_del(item->view, EVAS_CALLBACK_HIDE, > + _track_obj_view_update); > + evas_object_event_callback_del(item->view, EVAS_CALLBACK_DEL, > + _track_obj_view_del); > +} > + > + > /** > * @internal > * > @@ -4923,6 +4985,13 @@ _elm_widget_item_free(Elm_Widget_Item *item) > if (item->access_info) > eina_stringshare_del(item->access_info); > > + if (item->track_obj) > + { > + evas_object_event_callback_del(item->track_obj, EVAS_CALLBACK_DEL, > + _track_obj_del); > + evas_object_del(item->track_obj); > + } > + > EINA_LIST_FREE(item->signals, wisd) > { > eina_stringshare_del(wisd->emission); > @@ -5204,6 +5273,66 @@ > _elm_widget_item_domain_part_text_translatable_set(Elm_Widget_Item *item, > item->on_translate = EINA_FALSE; > } > > +EAPI Evas_Object * > +elm_widget_item_track(Elm_Widget_Item *item) > +{ > + ELM_WIDGET_ITEM_CHECK_OR_RETURN(item, NULL); > + > + if (item->track_obj) > + { > + evas_object_ref(item->track_obj); > + return item->track_obj; > + } > + > + if (!item->view) return NULL; > + > + Evas_Object *track = > + evas_object_rectangle_add(evas_object_evas_get(item->widget)); > + evas_object_color_set(track, 0, 0, 0, 0); > + evas_object_pass_events_set(track, EINA_TRUE); > + _track_obj_update(track, item->view); > + evas_object_event_callback_add(track, EVAS_CALLBACK_DEL, _track_obj_del, > + item); > + > + evas_object_event_callback_add(item->view, EVAS_CALLBACK_RESIZE, > + _track_obj_view_update, track); > + evas_object_event_callback_add(item->view, EVAS_CALLBACK_MOVE, > + _track_obj_view_update, track); > + evas_object_event_callback_add(item->view, EVAS_CALLBACK_SHOW, > + _track_obj_view_update, track); > + evas_object_event_callback_add(item->view, EVAS_CALLBACK_HIDE, > + _track_obj_view_update, track); > + evas_object_event_callback_add(item->view, EVAS_CALLBACK_DEL, > + _track_obj_view_del, item); > + > + evas_object_ref(track); > + > + item->track_obj = track; > + > + return track; > +} > + > +void > +elm_widget_item_untrack(Elm_Widget_Item *item) > +{ > + ELM_WIDGET_ITEM_CHECK_OR_RETURN(item); > + > + if (!item->track_obj) return; > + evas_object_unref(item->track_obj); > + > + if (evas_object_ref_get(item->track_obj) == 0) > + evas_object_del(item->track_obj); > +} > + > +int > +elm_widget_item_track_get(const Elm_Widget_Item *item) > +{ > + ELM_WIDGET_ITEM_CHECK_OR_RETURN(item, 0); > + > + if (!item->track_obj) return 0; > + return evas_object_ref_get(item->track_obj); > +} > + > typedef struct _Elm_Widget_Item_Tooltip Elm_Widget_Item_Tooltip; > > struct _Elm_Widget_Item_Tooltip > diff --git a/src/lib/elm_widget.h b/src/lib/elm_widget.h > index 48d8736..6b65601 100644 > --- a/src/lib/elm_widget.h > +++ b/src/lib/elm_widget.h > @@ -579,6 +579,7 @@ struct _Elm_Widget_Item > Eina_List *access_order; > Eina_Inlist *translate_strings; > Eina_List *signals; > + Evas_Object *track_obj; > > Eina_Bool disabled : 1; > Eina_Bool on_translate : 1; > @@ -772,6 +773,10 @@ EAPI const char * > _elm_widget_item_translatable_part_text_get(const Elm_Widg > EAPI void _elm_widget_item_translate(Elm_Widget_Item *item); > EAPI void > _elm_widget_item_domain_part_text_translatable_set(Elm_Widget_Item *item, > const char *part, const char *domain, Eina_Bool translatable); > > +EAPI Evas_Object *elm_widget_item_track(Elm_Widget_Item *item); > +EAPI void elm_widget_item_untrack(Elm_Widget_Item *item); > +EAPI int elm_widget_item_track_get(const Elm_Widget_Item *item); > + > /** > * Function to operate on a given widget's scrollabe children when necessary. > * @warning free the returned list with eina_list_free(). > > -- > > ------------------------------------------------------------------------------ > How ServiceNow helps IT people transform IT departments: > 1. Consolidate legacy IT systems to a single system of record for IT > 2. Standardize and globalize service processes across IT > 3. Implement zero-touch automation to replace manual, redundant tasks > http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk -- Gustavo Sverzut Barbieri -------------------------------------- Mobile: +55 (19) 9225-2202 Contact: http://www.gustavobarbieri.com.br/contact ------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. Consolidate legacy IT systems to a single system of record for IT 2. Standardize and globalize service processes across IT 3. Implement zero-touch automation to replace manual, redundant tasks http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel