jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=006546a042a4f945a4936e2f29a55bb1c67648ea

commit 006546a042a4f945a4936e2f29a55bb1c67648ea
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Tue Oct 24 14:43:43 2017 +0900

    elm: Use auto_unref for parts
    
    This avoids leaks.
---
 src/lib/elementary/efl_ui_layout.c      | 18 +++++-----
 src/lib/elementary/efl_ui_layout_pack.c | 64 ++++++++++++++++-----------------
 src/lib/elementary/efl_ui_progressbar.c |  5 ++-
 src/lib/elementary/efl_ui_win.c         |  5 +--
 src/lib/elementary/elementary_config.h  |  2 ++
 src/lib/elementary/elm_part_helper.h    | 40 +++++++++------------
 src/lib/elementary/elm_widget.c         | 17 +--------
 7 files changed, 63 insertions(+), 88 deletions(-)

diff --git a/src/lib/elementary/efl_ui_layout.c 
b/src/lib/elementary/efl_ui_layout.c
index 55035d5eb4..6ae329897c 100644
--- a/src/lib/elementary/efl_ui_layout.c
+++ b/src/lib/elementary/efl_ui_layout.c
@@ -2401,14 +2401,14 @@ _efl_ui_layout_efl_part_part(const Eo *obj, 
Efl_Ui_Layout_Data *sd, const char *
         return _efl_ui_layout_pack_proxy_get((Eo *) obj, type, part);
       case EFL_CANVAS_LAYOUT_PART_TYPE_TEXT:
       case EFL_CANVAS_LAYOUT_PART_TYPE_TEXTBLOCK:
-        return ELM_PART_OVERRIDE_IMPLEMENT(EFL_UI_LAYOUT_PART_TEXT_CLASS);
+        return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_TEXT_CLASS, obj, part);
       case EFL_CANVAS_LAYOUT_PART_TYPE_SWALLOW:
-        return ELM_PART_OVERRIDE_IMPLEMENT(EFL_UI_LAYOUT_PART_CONTENT_CLASS);
+        return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CONTENT_CLASS, obj, part);
       case EFL_CANVAS_LAYOUT_PART_TYPE_NONE:
         DBG("No such part '%s' in group '%s'", part, sd->group);
         return NULL;
       default:
-        return ELM_PART_OVERRIDE_IMPLEMENT(EFL_UI_LAYOUT_PART_CLASS);
+        return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CLASS, obj, part);
      }
 }
 
@@ -2437,7 +2437,7 @@ _efl_ui_layout_part_efl_ui_cursor_cursor_set(Eo *obj, 
void *_pd EINA_UNUSED, con
 {
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
    Efl_Ui_Layout_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
-   ELM_PART_RETURN_VAL(_efl_ui_layout_part_cursor_set(sd, pd->part, cursor));
+   return _efl_ui_layout_part_cursor_set(sd, pd->part, cursor);
 }
 
 EOLIAN static const char *
@@ -2445,7 +2445,7 @@ _efl_ui_layout_part_efl_ui_cursor_cursor_get(Eo *obj, 
void *_pd EINA_UNUSED)
 {
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
    Efl_Ui_Layout_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
-   ELM_PART_RETURN_VAL(_efl_ui_layout_part_cursor_get(sd, pd->part));
+   return _efl_ui_layout_part_cursor_get(sd, pd->part);
 }
 
 EOLIAN static Eina_Bool
@@ -2453,7 +2453,7 @@ _efl_ui_layout_part_efl_ui_cursor_cursor_style_set(Eo 
*obj, void *_pd EINA_UNUSE
 {
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
    Efl_Ui_Layout_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
-   ELM_PART_RETURN_VAL(_efl_ui_layout_part_cursor_style_set(sd, pd->part, 
style));
+   return _efl_ui_layout_part_cursor_style_set(sd, pd->part, style);
 }
 
 EOLIAN static const char *
@@ -2461,7 +2461,7 @@ _efl_ui_layout_part_efl_ui_cursor_cursor_style_get(Eo 
*obj, void *_pd EINA_UNUSE
 {
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
    Efl_Ui_Layout_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
-   ELM_PART_RETURN_VAL(_efl_ui_layout_part_cursor_style_get(sd, pd->part));
+   return _efl_ui_layout_part_cursor_style_get(sd, pd->part);
 }
 
 EOLIAN static Eina_Bool
@@ -2469,7 +2469,7 @@ 
_efl_ui_layout_part_efl_ui_cursor_cursor_theme_search_enabled_set(Eo *obj, void
 {
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
    Efl_Ui_Layout_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
-   ELM_PART_RETURN_VAL(_efl_ui_layout_part_cursor_engine_only_set(sd, 
pd->part, !allow));
+   return _efl_ui_layout_part_cursor_engine_only_set(sd, pd->part, !allow);
 }
 
 EOLIAN static Eina_Bool
@@ -2477,7 +2477,7 @@ 
_efl_ui_layout_part_efl_ui_cursor_cursor_theme_search_enabled_get(Eo *obj, void
 {
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
    Efl_Ui_Layout_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
-   ELM_PART_RETURN_VAL(!_efl_ui_layout_part_cursor_engine_only_get(sd, 
pd->part));
+   return !_efl_ui_layout_part_cursor_engine_only_get(sd, pd->part);
 }
 
 /* Efl.Ui.Layout.Part_Content */
diff --git a/src/lib/elementary/efl_ui_layout_pack.c 
b/src/lib/elementary/efl_ui_layout_pack.c
index 76a1315504..9cbf0a9b68 100644
--- a/src/lib/elementary/efl_ui_layout_pack.c
+++ b/src/lib/elementary/efl_ui_layout_pack.c
@@ -136,32 +136,32 @@ _efl_ui_layout_part_box_efl_container_content_iterate(Eo 
*obj, Efl_Ui_Layout_Box
    Eina_Iterator *it;
    Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
    it = evas_object_box_iterator_new(pack);
-   ELM_PART_RETURN_VAL(_part_item_iterator_create(obj, it, NULL));
+   return _part_item_iterator_create(obj, it, NULL);
 }
 
 EOLIAN static int
 _efl_ui_layout_part_box_efl_container_content_count(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Box_Data *pd)
 {
    Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
-   ELM_PART_RETURN_VAL(evas_obj_box_count(pack));
+   return evas_obj_box_count(pack);
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_box_efl_pack_pack_clear(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Box_Data *pd)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_box_remove_all(pd->obj, pd->sd, 
pd->part, EINA_TRUE));
+   return _efl_ui_layout_box_remove_all(pd->obj, pd->sd, pd->part, EINA_TRUE);
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_box_efl_pack_unpack_all(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Box_Data *pd)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_box_remove_all(pd->obj, pd->sd, 
pd->part, EINA_FALSE));
+   return _efl_ui_layout_box_remove_all(pd->obj, pd->sd, pd->part, EINA_FALSE);
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_box_efl_pack_unpack(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Box_Data *pd, Efl_Gfx *subobj)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_box_remove(pd->obj, pd->sd, pd->part, 
subobj) != NULL);
+   return _efl_ui_layout_box_remove(pd->obj, pd->sd, pd->part, subobj) != NULL;
 }
 
 EOLIAN static Eina_Bool
@@ -174,25 +174,25 @@ _efl_ui_layout_part_box_efl_container_content_remove(Eo 
*obj, Efl_Ui_Layout_Box_
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_box_efl_pack_pack(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Box_Data *pd, Efl_Gfx *subobj)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_box_append(pd->obj, pd->sd, pd->part, 
subobj));
+   return _efl_ui_layout_box_append(pd->obj, pd->sd, pd->part, subobj);
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_box_efl_pack_linear_pack_begin(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Box_Data *pd, Efl_Gfx *subobj)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_box_prepend(pd->obj, pd->sd, pd->part, 
subobj));
+   return _efl_ui_layout_box_prepend(pd->obj, pd->sd, pd->part, subobj);
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_box_efl_pack_linear_pack_end(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Box_Data *pd, Efl_Gfx *subobj)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_box_append(pd->obj, pd->sd, pd->part, 
subobj));
+   return _efl_ui_layout_box_append(pd->obj, pd->sd, pd->part, subobj);
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_box_efl_pack_linear_pack_before(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Box_Data *pd, Efl_Gfx *subobj, const Efl_Gfx *existing)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_box_insert_before(pd->obj, pd->sd, 
pd->part, subobj, existing));
+   return _efl_ui_layout_box_insert_before(pd->obj, pd->sd, pd->part, subobj, 
existing);
 }
 
 EOLIAN static Eina_Bool
@@ -202,19 +202,19 @@ _efl_ui_layout_part_box_efl_pack_linear_pack_after(Eo 
*obj EINA_UNUSED, Efl_Ui_L
    int index;
    Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
    index = efl_pack_index_get(pack, existing);
-   if (index < 0) ELM_PART_RETURN_VAL(EINA_FALSE);
+   if (index < 0) return EINA_FALSE;
 
    other = efl_pack_content_get(pack, index + 1);
    if (other)
-     ELM_PART_RETURN_VAL(_efl_ui_layout_box_insert_before(pd->obj, pd->sd, 
pd->part, subobj, other));
+     return _efl_ui_layout_box_insert_before(pd->obj, pd->sd, pd->part, 
subobj, other);
 
-   ELM_PART_RETURN_VAL(efl_pack_end(obj, subobj));
+   return efl_pack_end(obj, subobj);
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_box_efl_pack_linear_pack_at(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Box_Data *pd, Efl_Gfx *subobj, int index)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_box_insert_at(pd->obj, pd->sd, pd->part, 
subobj, index));
+   return _efl_ui_layout_box_insert_at(pd->obj, pd->sd, pd->part, subobj, 
index);
 }
 
 EOLIAN static Efl_Gfx *
@@ -226,8 +226,8 @@ _efl_ui_layout_part_box_efl_pack_linear_pack_content_get(Eo 
*obj EINA_UNUSED, Ef
 
    priv = efl_data_scope_get(pack, EVAS_BOX_CLASS);
    opt = eina_list_nth(priv->children, index);
-   if (!opt) ELM_PART_RETURN_VAL(NULL);
-   ELM_PART_RETURN_VAL(opt->obj);
+   if (!opt) return NULL;
+   return opt->obj;
 }
 
 EOLIAN static Efl_Gfx *
@@ -237,19 +237,19 @@ _efl_ui_layout_part_box_efl_pack_linear_pack_unpack_at(Eo 
*obj, Efl_Ui_Layout_Bo
    Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
 
    subobj = efl_pack_content_get(pack, index);
-   if (!subobj) ELM_PART_RETURN_VAL(NULL);
+   if (!subobj) return NULL;
    if (efl_pack_unpack(obj, subobj))
-     ELM_PART_RETURN_VAL(subobj);
+     return subobj;
 
    ERR("failed to remove %p from %p (item %d)", subobj, pd->obj, index);
-   ELM_PART_RETURN_VAL(NULL);
+   return NULL;
 }
 
 EOLIAN static int
 _efl_ui_layout_part_box_efl_pack_linear_pack_index_get(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Box_Data *pd, const Efl_Gfx *subobj)
 {
    Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
-   ELM_PART_RETURN_VAL(efl_pack_index_get(pack, subobj));
+   return efl_pack_index_get(pack, subobj);
 }
 
 EOLIAN static Efl_Ui_Dir
@@ -257,7 +257,7 @@ _efl_ui_layout_part_box_efl_ui_direction_direction_get(Eo 
*obj EINA_UNUSED, Efl_
 {
    ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EFL_UI_DIR_DEFAULT);
 
-   ELM_PART_RETURN_VAL(efl_ui_direction_get(efl_part(wd->resize_obj, 
pd->part)));
+   return efl_ui_direction_get(efl_part(wd->resize_obj, pd->part));
 }
 
 
@@ -289,33 +289,33 @@ 
_efl_ui_layout_part_table_efl_container_content_iterate(Eo *obj, Efl_Ui_Layout_T
 
    it = evas_object_table_iterator_new(pack);
 
-   ELM_PART_RETURN_VAL(_part_item_iterator_create(obj, it, NULL));
+   return _part_item_iterator_create(obj, it, NULL);
 }
 
 EOLIAN static int
 _efl_ui_layout_part_table_efl_container_content_count(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Table_Data *pd)
 {
    Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
-   ELM_PART_RETURN_VAL(evas_obj_table_count(pack));
+   return evas_obj_table_count(pack);
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_table_efl_pack_pack_clear(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Table_Data *pd)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_table_clear(pd->obj, pd->sd, pd->part, 
EINA_TRUE));
+   return _efl_ui_layout_table_clear(pd->obj, pd->sd, pd->part, EINA_TRUE);
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_table_efl_pack_unpack_all(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Table_Data *pd)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_table_clear(pd->obj, pd->sd, pd->part, 
EINA_FALSE));
+   return _efl_ui_layout_table_clear(pd->obj, pd->sd, pd->part, EINA_FALSE);
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_table_efl_pack_unpack(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Table_Data *pd, Efl_Gfx *subobj)
 {
-   if (!subobj) ELM_PART_RETURN_VAL(EINA_FALSE);
-   ELM_PART_RETURN_VAL(_efl_ui_layout_table_unpack(pd->obj, pd->sd, pd->part, 
subobj) == subobj);
+   if (!subobj) return EINA_FALSE;
+   return _efl_ui_layout_table_unpack(pd->obj, pd->sd, pd->part, subobj) == 
subobj;
 }
 
 EOLIAN static Eina_Bool
@@ -328,14 +328,14 @@ _efl_ui_layout_part_table_efl_container_content_remove(Eo 
*obj, Efl_Ui_Layout_Ta
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_table_efl_pack_grid_pack_grid(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Table_Data *pd, Efl_Gfx *subobj, int col, int row, int colspan, 
int rowspan)
 {
-   ELM_PART_RETURN_VAL(_efl_ui_layout_table_pack(pd->obj, pd->sd, pd->part, 
subobj, col, row, colspan, rowspan));
+   return _efl_ui_layout_table_pack(pd->obj, pd->sd, pd->part, subobj, col, 
row, colspan, rowspan);
 }
 
 EOLIAN static Efl_Gfx *
 _efl_ui_layout_part_table_efl_pack_grid_grid_content_get(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Table_Data *pd, int col, int row)
 {
    Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
-   ELM_PART_RETURN_VAL(evas_object_table_child_get(pack, col, row));
+   return evas_object_table_child_get(pack, col, row);
 }
 
 EOLIAN static Eina_Iterator *
@@ -364,7 +364,7 @@ 
_efl_ui_layout_part_table_efl_pack_grid_grid_contents_get(Eo *obj EINA_UNUSED, E
           }
      }
 
-   ELM_PART_RETURN_VAL(_part_item_iterator_create(pd->obj, 
eina_list_iterator_new(l), l));
+   return _part_item_iterator_create(pd->obj, eina_list_iterator_new(l), l);
 }
 
 EOLIAN static Eina_Bool
@@ -380,7 +380,7 @@ 
_efl_ui_layout_part_table_efl_pack_grid_grid_position_get(Eo *obj EINA_UNUSED, E
    if (colspan) *colspan = cs;
    if (rowspan) *rowspan = rs;
 
-   ELM_PART_RETURN_VAL(ret);
+   return ret;
 }
 
 EOLIAN static void
@@ -396,7 +396,7 @@ _efl_ui_layout_part_table_efl_pack_grid_grid_columns_get(Eo 
*obj EINA_UNUSED, Ef
    int cols, rows;
    Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
    evas_object_table_col_row_size_get(pack, &cols, &rows);
-   ELM_PART_RETURN_VAL(cols);
+   return cols;
 }
 
 EOLIAN static int
@@ -405,7 +405,7 @@ _efl_ui_layout_part_table_efl_pack_grid_grid_rows_get(Eo 
*obj EINA_UNUSED, Efl_U
    int cols, rows;
    Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
    evas_object_table_col_row_size_get(pack, &cols, &rows);
-   ELM_PART_RETURN_VAL(rows);
+   return rows;
 }
 
 #include "efl_ui_layout_part_box.eo.c"
diff --git a/src/lib/elementary/efl_ui_progressbar.c 
b/src/lib/elementary/efl_ui_progressbar.c
index 90520bb584..ba15caeda0 100644
--- a/src/lib/elementary/efl_ui_progressbar.c
+++ b/src/lib/elementary/efl_ui_progressbar.c
@@ -624,7 +624,7 @@ _efl_ui_progressbar_efl_part_part(const Eo *obj, 
Efl_Ui_Progressbar_Data *sd EIN
 
    // Progress bars are dragable types
    if (edje_object_part_drag_dir_get(wd->resize_obj, part) != 
EFL_UI_DRAG_DIR_NONE)
-     return ELM_PART_OVERRIDE_IMPLEMENT(EFL_UI_PROGRESSBAR_PART_CLASS);
+     return ELM_PART_IMPLEMENT(EFL_UI_PROGRESSBAR_PART_CLASS, obj, part);
 
    return efl_part(efl_super(obj, MY_CLASS), part);
 }
@@ -636,7 +636,6 @@ _efl_ui_progressbar_part_efl_ui_range_range_value_set(Eo 
*obj, void *_pd EINA_UN
   Efl_Ui_Progressbar_Data *sd = efl_data_scope_get(pd->obj, 
EFL_UI_PROGRESSBAR_CLASS);
 
   _progressbar_part_value_set(pd->obj, sd, pd->part, val);
-  ELM_PART_RETURN_VOID;
 }
 
 EOLIAN static double
@@ -645,7 +644,7 @@ _efl_ui_progressbar_part_efl_ui_range_range_value_get(Eo 
*obj, void *_pd EINA_UN
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
    Efl_Ui_Progressbar_Data *sd = efl_data_scope_get(pd->obj, 
EFL_UI_PROGRESSBAR_CLASS);
 
-   ELM_PART_RETURN_VAL(_progressbar_part_value_get(sd, pd->part));
+   return _progressbar_part_value_get(sd, pd->part);
 }
 
 #include "efl_ui_progressbar_part.eo.c"
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index b05f3493a8..14e34b8313 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -7012,7 +7012,6 @@ _efl_ui_win_part_efl_gfx_color_set(Eo *obj, void *_pd 
EINA_UNUSED, int r, int g,
      ERR("Evas only handles premultiplied colors (0 <= R,G,B <= A <= 255)");
 
    _efl_ui_win_part_color_set(pd->obj, sd, pd->part, r, g, b, a);
-   ELM_PART_RETURN_VOID;
 }
 
 static void
@@ -7021,7 +7020,6 @@ _efl_ui_win_part_efl_gfx_color_get(Eo *obj, void *_pd 
EINA_UNUSED, int *r, int *
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
    Efl_Ui_Win_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
    _efl_ui_win_part_color_get(pd->obj, sd, pd->part, r, g, b, a);
-   ELM_PART_RETURN_VOID;
 }
 
 static Eina_Bool
@@ -7029,7 +7027,7 @@ _efl_ui_win_part_efl_file_file_set(Eo *obj, void *_pd 
EINA_UNUSED, const char *f
 {
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
    Efl_Ui_Win_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
-   ELM_PART_RETURN_VAL(_efl_ui_win_part_file_set(pd->obj, sd, pd->part, file, 
key));
+   return _efl_ui_win_part_file_set(pd->obj, sd, pd->part, file, key);
 }
 
 static void
@@ -7038,7 +7036,6 @@ _efl_ui_win_part_efl_file_file_get(Eo *obj, void *_pd 
EINA_UNUSED, const char **
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
    Efl_Ui_Win_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
    _efl_ui_win_part_file_get(pd->obj, sd, pd->part, file, key);
-   ELM_PART_RETURN_VOID;
 }
 
 ELM_PART_OVERRIDE(efl_ui_win, EFL_UI_WIN, Efl_Ui_Win_Data)
diff --git a/src/lib/elementary/elementary_config.h 
b/src/lib/elementary/elementary_config.h
index 776c634b4d..ce1a00f338 100644
--- a/src/lib/elementary/elementary_config.h
+++ b/src/lib/elementary/elementary_config.h
@@ -13,3 +13,5 @@
 #define EFL_CANVAS_OBJECT_PROTECTED
 #define EFL_CANVAS_GROUP_PROTECTED
 #define EFL_CANVAS_GROUP_BETA
+#define EFL_OBJECT_BETA
+#define EFL_OBJECT_PROTECTED
diff --git a/src/lib/elementary/elm_part_helper.h 
b/src/lib/elementary/elm_part_helper.h
index 20d13035cb..eb84c04467 100644
--- a/src/lib/elementary/elm_part_helper.h
+++ b/src/lib/elementary/elm_part_helper.h
@@ -6,18 +6,11 @@
 //#define ELM_PART_HOOK do { ERR("%s@%p:%s [%d]", efl_class_name_get(pd->obj), 
pd->obj, pd->part, (int) pd->temp); } while(0)
 #define ELM_PART_HOOK do {} while(0)
 
-//#define ELM_PART_REF(obj, pd) do { if (!(pd->temp++)) efl_ref(obj); } 
while(0)
-#define ELM_PART_UNREF(obj, pd) do { if (pd->temp) { if (!(--pd->temp)) 
efl_del(obj); } } while(0)
-#define ELM_PART_RETURN_VAL(a) do { ELM_PART_HOOK; typeof(a) _ret = a; 
ELM_PART_UNREF(obj, pd); return _ret; } while(0)
-#define ELM_PART_RETURN_VOID do { ELM_PART_HOOK; ELM_PART_UNREF(obj, pd); 
return; } while(0)
-//#define ELM_PART_CALL(a) ({ ELM_PART_REF(obj, pd); a; })
-
 typedef struct _Elm_Part_Data Elm_Part_Data;
 struct _Elm_Part_Data
 {
    Eo             *obj;
    Eina_Tmpstr    *part;
-   unsigned char   temp;
 };
 
 // Note: this generic implementation can be improved to support part object
@@ -70,15 +63,16 @@ _elm_part_alias_find(const 
Elm_Layout_Part_Alias_Description *aliases, const cha
    return EINA_FALSE;
 }
 
-#define ELM_PART_OVERRIDE_IMPLEMENT(PART_CLASS) ({ \
-   Eo *proxy = efl_add(PART_CLASS, (Eo *) obj); \
+#define ELM_PART_IMPLEMENT(PART_CLASS, _obj, _part) ({ \
+   EINA_SAFETY_ON_NULL_RETURN_VAL(_obj, NULL); \
+   EINA_SAFETY_ON_NULL_RETURN_VAL(_part, NULL); \
+   Eo *proxy = efl_add(PART_CLASS, (Eo *) _obj); \
    Elm_Part_Data *pd = efl_data_scope_get(proxy, EFL_UI_WIDGET_PART_CLASS); \
-   if (pd) \
-     { \
-        pd->obj = (Eo *) obj; \
-        pd->part = eina_tmpstr_add(part); \
-        pd->temp = 1; \
-     } \
+   EINA_SAFETY_ON_NULL_RETURN_VAL(pd, NULL); \
+   pd->obj = (Eo *) _obj; \
+   pd->part = eina_tmpstr_add(_part); \
+   efl_allow_parent_unref_set(proxy, 1); \
+   efl_auto_unref_set(proxy, 1); \
    proxy; })
 
 #define ELM_PART_OVERRIDE_ONLY_ALIASES(type, TYPE, typedata, aliases) \
@@ -87,7 +81,7 @@ _elm_part_alias_find(const Elm_Layout_Part_Alias_Description 
*aliases, const cha
    { \
       EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL); \
       if (_elm_part_alias_find(aliases, part)) \
-        return ELM_PART_OVERRIDE_IMPLEMENT(TYPE ## _PART_CLASS); \
+        return ELM_PART_IMPLEMENT(TYPE ## _PART_CLASS, obj, part); \
       return efl_part(efl_super(obj, MY_CLASS), part); \
    }
 
@@ -96,7 +90,7 @@ EOLIAN static Efl_Object * \
 _ ## type ## _efl_part_part(const Eo *obj, typedata *priv EINA_UNUSED, const 
char *part) \
 { \
    EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL); \
-   return ELM_PART_OVERRIDE_IMPLEMENT(TYPE ## _PART_CLASS); \
+   return ELM_PART_IMPLEMENT(TYPE ## _PART_CLASS, obj, part); \
 }
 
 #define ELM_PART_OVERRIDE_CONTENT_SET_FULL(full, type, TYPE, typedata) \
@@ -105,7 +99,7 @@ _ ## full ## _efl_container_content_set(Eo *obj, void *_pd 
EINA_UNUSED, Efl_Gfx
 { \
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
    typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
-   ELM_PART_RETURN_VAL(_ ## type ## _content_set(pd->obj, sd, pd->part, 
content)); \
+   return _ ## type ## _content_set(pd->obj, sd, pd->part, content); \
 }
 
 #define ELM_PART_OVERRIDE_CONTENT_GET_FULL(full, type, TYPE, typedata) \
@@ -114,7 +108,7 @@ _ ## full ## _efl_container_content_get(Eo *obj, void *_pd 
EINA_UNUSED) \
 { \
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
    typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
-   ELM_PART_RETURN_VAL(_ ## type ## _content_get(pd->obj, sd, pd->part)); \
+   return _ ## type ## _content_get(pd->obj, sd, pd->part); \
 }
 
 #define ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(full, type, TYPE, typedata) \
@@ -123,7 +117,7 @@ _ ## full ## _efl_container_content_unset(Eo *obj, void 
*_pd EINA_UNUSED) \
 { \
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
    typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
-   ELM_PART_RETURN_VAL(_ ## type ## _content_unset(pd->obj, sd, pd->part)); \
+   return _ ## type ## _content_unset(pd->obj, sd, pd->part); \
 }
 
 #define ELM_PART_OVERRIDE_TEXT_SET_FULL(full, type, TYPE, typedata) \
@@ -133,7 +127,6 @@ _ ## full ## _efl_text_text_set(Eo *obj, void *_pd 
EINA_UNUSED, const char *text
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
    typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
    _ ## type ## _text_set(pd->obj, sd, pd->part, text); \
-   ELM_PART_RETURN_VOID; \
 }
 
 #define ELM_PART_OVERRIDE_TEXT_GET_FULL(full, type, TYPE, typedata) \
@@ -142,7 +135,7 @@ _ ## full ## _efl_text_text_get(Eo *obj, void *_pd 
EINA_UNUSED) \
 { \
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
    typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
-   ELM_PART_RETURN_VAL(_ ## type ## _text_get(pd->obj, sd, pd->part)); \
+   return _ ## type ## _text_get(pd->obj, sd, pd->part); \
 }
 
 #define ELM_PART_OVERRIDE_TEXT_MARKUP_GET_FULL(full, type, TYPE, typedata) \
@@ -151,7 +144,7 @@ _ ## full ## _efl_text_markup_markup_get(Eo *obj, void *_pd 
EINA_UNUSED) \
 { \
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
    typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
-   ELM_PART_RETURN_VAL(_ ## type ## _text_markup_get(pd->obj, sd, pd->part)); \
+   return _ ## type ## _text_markup_get(pd->obj, sd, pd->part); \
 }
 
 #define ELM_PART_OVERRIDE_TEXT_MARKUP_SET_FULL(full, type, TYPE, typedata) \
@@ -161,7 +154,6 @@ _ ## full ## _efl_text_markup_markup_set(Eo *obj, void *_pd 
EINA_UNUSED, const c
    Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
    typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
    _ ## type ## _text_markup_set(pd->obj, sd, pd->part, markup); \
-  ELM_PART_RETURN_VOID; \
 }
 
 #define ELM_PART_OVERRIDE_CONTENT_SET(type, TYPE, typedata) \
diff --git a/src/lib/elementary/elm_widget.c b/src/lib/elementary/elm_widget.c
index bea9f132ce..c7af125ba0 100644
--- a/src/lib/elementary/elm_widget.c
+++ b/src/lib/elementary/elm_widget.c
@@ -5557,22 +5557,7 @@ elm_widget_signal_callback_del(Eo *obj, const char 
*emission, const char *source
 EOLIAN static Efl_Object *
 _elm_widget_efl_part_part(const Eo *obj, Elm_Widget_Smart_Data *wd 
EINA_UNUSED, const char *part)
 {
-   Elm_Part_Data *pd;
-   Eo *proxy;
-
-   EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
-
-   // Generic parts for every kind of widget
-   proxy = efl_add(EFL_UI_WIDGET_PART_CLASS, (Eo *) obj);
-   pd = efl_data_scope_get(proxy, EFL_UI_WIDGET_PART_CLASS);
-   if (pd)
-     {
-        pd->obj  = (Eo *) obj;
-        pd->part = eina_tmpstr_add(part);
-        pd->temp = 1;
-     }
-
-   return proxy;
+   return ELM_PART_IMPLEMENT(EFL_UI_WIDGET_PART_CLASS, obj, part);
 }
 
 EOLIAN static void \

-- 


Reply via email to