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

Reply via email to