elm: Use auto_unref for parts

This avoids leaks.
This commit is contained in:
Jean-Philippe Andre 2017-10-24 14:43:43 +09:00
parent 1b481f0ae8
commit 006546a042
7 changed files with 63 additions and 88 deletions

View File

@ -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 */

View File

@ -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"

View File

@ -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"

View File

@ -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)

View File

@ -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

View File

@ -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) \

View File

@ -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 \