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 \