efl_ui_widget: remove self reference
as an example: elm_test uses roughly 500 widgets, this pointer takes 8 bytes, this is wasting quite some time, which can be perfectly safed by just structuring the code a little bit more. In some callbacks we need to call one more time efl_data_scope_get but that is not a that big issue, as most calls after that are also doing a eo call on that object, so the eo_id is already cached. Reviewed-by: Cedric BAIL <cedric.bail@free.fr> Differential Revision: https://phab.enlightenment.org/D9683
This commit is contained in:
parent
bedb6df973
commit
4cede693a5
|
@ -377,15 +377,15 @@ _efl_ui_image_zoomable_pan_efl_canvas_group_group_calculate(Eo *obj, Efl_Ui_Imag
|
|||
|
||||
evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
|
||||
_image_place(
|
||||
wd->obj, psd->wsd->pan_x, psd->wsd->pan_y,
|
||||
psd->wobj, psd->wsd->pan_x, psd->wsd->pan_y,
|
||||
ox - psd->wsd->g_layer_zoom.imx, oy - psd->wsd->g_layer_zoom.imy, ow,
|
||||
oh);
|
||||
|
||||
EINA_LIST_FOREACH(psd->wsd->grids, l, g)
|
||||
{
|
||||
_grid_load(wd->obj, g);
|
||||
_grid_load(psd->wobj, g);
|
||||
_grid_place(
|
||||
wd->obj, g, psd->wsd->pan_x,
|
||||
psd->wobj, g, psd->wsd->pan_x,
|
||||
psd->wsd->pan_y, ox - psd->wsd->g_layer_zoom.imx,
|
||||
oy - psd->wsd->g_layer_zoom.imy, ow, oh);
|
||||
}
|
||||
|
@ -536,7 +536,7 @@ _tile_preloaded_cb(void *data,
|
|||
"efl");
|
||||
|
||||
efl_event_callback_legacy_call
|
||||
(wd->obj, EFL_UI_IMAGE_ZOOMABLE_EVENT_LOADED_DETAIL, NULL);
|
||||
(git->obj, EFL_UI_IMAGE_ZOOMABLE_EVENT_LOADED_DETAIL, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -620,12 +620,12 @@ _on_sub_obj_del(void *data, const Efl_Event *event)
|
|||
|
||||
if (_elm_widget_is(event->object))
|
||||
{
|
||||
if (_is_focused(event->object)) _parents_unfocus(sd->obj);
|
||||
if (_is_focused(event->object)) _parents_unfocus(data);
|
||||
}
|
||||
if (event->object == sd->resize_obj)
|
||||
{
|
||||
/* already dels sub object */
|
||||
elm_widget_resize_object_set(sd->obj, NULL);
|
||||
elm_widget_resize_object_set(data, NULL);
|
||||
}
|
||||
else if (event->object == sd->hover_obj)
|
||||
{
|
||||
|
@ -633,8 +633,8 @@ _on_sub_obj_del(void *data, const Efl_Event *event)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!elm_widget_sub_object_del(sd->obj, event->object))
|
||||
ERR("failed to remove sub object %p from %p\n", event->object, sd->obj);
|
||||
if (!elm_widget_sub_object_del(data, event->object))
|
||||
ERR("failed to remove sub object %p from %p\n", event->object, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -715,8 +715,6 @@ _obj_mouse_in(void *data,
|
|||
EOLIAN static void
|
||||
_efl_ui_widget_efl_canvas_group_group_add(Eo *obj, Elm_Widget_Smart_Data *priv)
|
||||
{
|
||||
|
||||
priv->obj = obj;
|
||||
priv->mirrored_auto_mode = EINA_TRUE; /* will follow system locale
|
||||
* settings */
|
||||
priv->focus_move_policy_auto_mode = EINA_TRUE;
|
||||
|
@ -791,9 +789,9 @@ _efl_ui_widget_efl_canvas_group_group_del(Eo *obj, Elm_Widget_Smart_Data *sd)
|
|||
}
|
||||
|
||||
static void
|
||||
_smart_reconfigure(Elm_Widget_Smart_Data *sd)
|
||||
_smart_reconfigure(Eo *obj, Elm_Widget_Smart_Data *sd)
|
||||
{
|
||||
Eina_Rect geom = efl_gfx_entity_geometry_get(sd->obj);
|
||||
Eina_Rect geom = efl_gfx_entity_geometry_get(obj);
|
||||
|
||||
if (sd->resize_obj)
|
||||
{
|
||||
|
@ -808,7 +806,7 @@ _smart_reconfigure(Elm_Widget_Smart_Data *sd)
|
|||
efl_gfx_entity_geometry_set(sd->bg, geom);
|
||||
}
|
||||
if (sd->has_shadow)
|
||||
_elm_widget_shadow_update(sd->obj);
|
||||
_elm_widget_shadow_update(obj);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
|
@ -825,7 +823,7 @@ _efl_ui_widget_efl_gfx_entity_position_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart
|
|||
efl_gfx_entity_position_set(sd->bg, pos);
|
||||
|
||||
if (sd->has_shadow)
|
||||
_elm_widget_shadow_update(sd->obj);
|
||||
_elm_widget_shadow_update(obj);
|
||||
|
||||
efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos);
|
||||
}
|
||||
|
@ -844,7 +842,7 @@ _efl_ui_widget_efl_gfx_entity_size_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Dat
|
|||
efl_gfx_entity_size_set(sd->bg, sz);
|
||||
|
||||
if (sd->has_shadow)
|
||||
_elm_widget_shadow_update(sd->obj);
|
||||
_elm_widget_shadow_update(obj);
|
||||
|
||||
efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), sz);
|
||||
}
|
||||
|
@ -1642,7 +1640,7 @@ _efl_ui_widget_resize_object_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eo *sobj)
|
|||
|
||||
elm_widget_sub_object_add(obj, sobj);
|
||||
evas_object_smart_member_add(sobj, obj);
|
||||
_smart_reconfigure(sd);
|
||||
_smart_reconfigure(obj, sd);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1666,7 +1664,7 @@ elm_widget_hover_object_set(Eo *obj, Evas_Object *sobj)
|
|||
if (sd->hover_obj)
|
||||
{
|
||||
_callbacks_add(sobj, obj);
|
||||
_smart_reconfigure(sd);
|
||||
_smart_reconfigure(obj, sd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5201,11 +5199,10 @@ elm_widget_show_region_set(Eo *obj, Eina_Rect sr, Eina_Bool forceshow)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
child_obj = obj;
|
||||
do
|
||||
{
|
||||
parent_obj = sd->parent_obj;
|
||||
child_obj = sd->obj;
|
||||
if ((!parent_obj) || (!_elm_widget_is(parent_obj))) break;
|
||||
sd = efl_data_scope_get(parent_obj, MY_CLASS);
|
||||
if (!sd) break;
|
||||
|
@ -5219,6 +5216,7 @@ elm_widget_show_region_set(Eo *obj, Eina_Rect sr, Eina_Bool forceshow)
|
|||
|
||||
if (sd->on_show_region)
|
||||
sd->on_show_region(sd->on_show_region_data, parent_obj, sr);
|
||||
child_obj = parent_obj;
|
||||
}
|
||||
while (parent_obj);
|
||||
}
|
||||
|
@ -5664,7 +5662,7 @@ _efl_ui_widget_bg_get(const Efl_Ui_Widget *obj)
|
|||
sd->bg = bg_obj;
|
||||
efl_canvas_group_member_add((Eo *)obj, sd->bg);
|
||||
evas_object_stack_below(sd->bg, sd->resize_obj);
|
||||
_smart_reconfigure(sd);
|
||||
_smart_reconfigure((Eo*)obj, sd);
|
||||
}
|
||||
|
||||
return bg_obj;
|
||||
|
@ -5796,7 +5794,7 @@ _efl_ui_property_bind_clean(Eo *obj EINA_UNUSED,
|
|||
}
|
||||
|
||||
static void
|
||||
_efl_ui_property_bind_get(Efl_Ui_Widget_Data *pd, Efl_Ui_Property_Bound *prop)
|
||||
_efl_ui_property_bind_get(Eo *obj, Efl_Ui_Widget_Data *pd, Efl_Ui_Property_Bound *prop)
|
||||
{
|
||||
Eina_Value *value;
|
||||
Eina_Future *f;
|
||||
|
@ -5807,7 +5805,7 @@ _efl_ui_property_bind_get(Efl_Ui_Widget_Data *pd, Efl_Ui_Property_Bound *prop)
|
|||
if (!pd->properties.model) return ;
|
||||
|
||||
value = efl_model_property_get(pd->properties.model, prop->property);
|
||||
target = prop->part ? efl_part(pd->obj, prop->part) : pd->obj;
|
||||
target = prop->part ? efl_part(obj, prop->part) : obj;
|
||||
|
||||
fprintf(stderr, "setting: %s for %s from %s\n",
|
||||
eina_value_to_string(value), prop->property, efl_debug_name_get(pd->properties.model));
|
||||
|
@ -5820,22 +5818,22 @@ _efl_ui_property_bind_get(Efl_Ui_Widget_Data *pd, Efl_Ui_Property_Bound *prop)
|
|||
if (prop->f) eina_future_cancel(prop->f);
|
||||
f = efl_model_property_set(pd->properties.model, prop->property,
|
||||
eina_value_error_new(err));
|
||||
prop->f = efl_future_then(pd->obj, f, .free = _efl_ui_property_bind_clean, .data = prop);
|
||||
prop->f = efl_future_then(obj, f, .free = _efl_ui_property_bind_clean, .data = prop);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_property_bind_set(Efl_Ui_Widget_Data *pd, Efl_Ui_Property_Bound *prop)
|
||||
_efl_ui_property_bind_set(Eo *obj, Efl_Ui_Widget_Data *pd, Efl_Ui_Property_Bound *prop)
|
||||
{
|
||||
Eina_Value value;
|
||||
Eina_Future *f;
|
||||
Eo *target;
|
||||
|
||||
target = prop->part ? efl_part(pd->obj, prop->part) : pd->obj;
|
||||
target = prop->part ? efl_part(obj, prop->part) : obj;
|
||||
value = efl_property_reflection_get(target, prop->key);
|
||||
|
||||
if (prop->f) eina_future_cancel(prop->f);
|
||||
f = efl_model_property_set(pd->properties.model, prop->property, eina_value_dup(&value));
|
||||
prop->f = efl_future_then(pd->obj, f, .free = _efl_ui_property_bind_clean, .data = prop);
|
||||
prop->f = efl_future_then(obj, f, .free = _efl_ui_property_bind_clean, .data = prop);
|
||||
eina_value_flush(&value);
|
||||
}
|
||||
|
||||
|
@ -5843,7 +5841,7 @@ static void
|
|||
_efl_ui_model_property_bind_changed(void *data, const Efl_Event *event)
|
||||
{
|
||||
Efl_Model_Property_Event *evt = event->info;
|
||||
Efl_Ui_Widget_Data *pd = data;
|
||||
ELM_WIDGET_DATA_GET(data, pd);
|
||||
Eina_Array_Iterator it;
|
||||
const char *prop;
|
||||
unsigned int i;
|
||||
|
@ -5853,7 +5851,7 @@ _efl_ui_model_property_bind_changed(void *data, const Efl_Event *event)
|
|||
Efl_Ui_Property_Bound *lookup;
|
||||
|
||||
lookup = eina_hash_find(pd->properties.model_lookup, prop);
|
||||
if (lookup) _efl_ui_property_bind_get(pd, lookup);
|
||||
if (lookup) _efl_ui_property_bind_get(data, pd, lookup);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5861,7 +5859,7 @@ static void
|
|||
_efl_ui_view_property_bind_changed(void *data, const Efl_Event *event)
|
||||
{
|
||||
Efl_Ui_Property_Event *evt = event->info;
|
||||
Efl_Ui_Widget_Data *pd = data;
|
||||
ELM_WIDGET_DATA_GET(data, pd);
|
||||
Eina_Array_Iterator it;
|
||||
Eina_Stringshare *prop;
|
||||
unsigned int i;
|
||||
|
@ -5871,19 +5869,19 @@ _efl_ui_view_property_bind_changed(void *data, const Efl_Event *event)
|
|||
Efl_Ui_Property_Bound *lookup;
|
||||
|
||||
lookup = eina_hash_find(pd->properties.view_lookup, prop);
|
||||
if (lookup) _efl_ui_property_bind_set(pd, lookup);
|
||||
if (lookup) _efl_ui_property_bind_set(data, pd, lookup);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_widget_model_update(Efl_Ui_Widget_Data *pd)
|
||||
_efl_ui_widget_model_update(Eo *obj, Efl_Ui_Widget_Data *pd)
|
||||
{
|
||||
Efl_Ui_Property_Bound *property;
|
||||
Eina_Iterator *it;
|
||||
|
||||
it = eina_hash_iterator_data_new(pd->properties.model_lookup);
|
||||
EINA_ITERATOR_FOREACH(it, property)
|
||||
_efl_ui_property_bind_get(pd, property);
|
||||
_efl_ui_property_bind_get(obj, pd, property);
|
||||
eina_iterator_free(it);
|
||||
}
|
||||
|
||||
|
@ -5897,23 +5895,23 @@ EFL_CALLBACKS_ARRAY_DEFINE(efl_ui_widget_model_provider_callbacks,
|
|||
static void
|
||||
_efl_ui_widget_model_provider_model_change(void *data, const Efl_Event *event)
|
||||
{
|
||||
Efl_Ui_Widget_Data *pd = data;
|
||||
ELM_WIDGET_DATA_GET(data, pd);
|
||||
|
||||
efl_replace(&pd->properties.model,
|
||||
efl_ui_view_model_get(pd->properties.provider));
|
||||
_efl_ui_widget_model_update(pd);
|
||||
_efl_ui_widget_model_update(data, pd);
|
||||
|
||||
efl_event_callback_call(pd->obj, EFL_UI_VIEW_EVENT_MODEL_CHANGED, event->info);
|
||||
efl_event_callback_call(data, EFL_UI_VIEW_EVENT_MODEL_CHANGED, event->info);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_widget_model_provider_invalidate(void *data, const Efl_Event *event EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Widget_Data *pd = data;
|
||||
ELM_WIDGET_DATA_GET(data, pd);
|
||||
|
||||
efl_event_callback_array_del(pd->properties.provider,
|
||||
efl_ui_widget_model_provider_callbacks(),
|
||||
pd);
|
||||
data);
|
||||
efl_replace(&pd->properties.provider, NULL);
|
||||
efl_replace(&pd->properties.model, NULL);
|
||||
}
|
||||
|
@ -5932,7 +5930,7 @@ _efl_ui_widget_model_register(Eo *obj, Efl_Ui_Widget_Data *pd)
|
|||
if (!pd->properties.provider) return ;
|
||||
efl_event_callback_array_add(pd->properties.provider,
|
||||
efl_ui_widget_model_provider_callbacks(),
|
||||
pd);
|
||||
obj);
|
||||
|
||||
efl_replace(&pd->properties.model,
|
||||
efl_ui_view_model_get(pd->properties.provider));
|
||||
|
@ -5948,9 +5946,9 @@ _efl_ui_widget_model_register(Eo *obj, Efl_Ui_Widget_Data *pd)
|
|||
if (!pd->properties.model_lookup) return ;
|
||||
|
||||
efl_event_callback_add(pd->properties.model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
|
||||
_efl_ui_model_property_bind_changed, pd);
|
||||
_efl_ui_model_property_bind_changed, obj);
|
||||
efl_event_callback_add(obj, EFL_UI_PROPERTY_BIND_EVENT_PROPERTIES_CHANGED,
|
||||
_efl_ui_view_property_bind_changed, pd);
|
||||
_efl_ui_view_property_bind_changed, obj);
|
||||
pd->properties.registered = EINA_TRUE;
|
||||
}
|
||||
|
||||
|
@ -5961,15 +5959,15 @@ _efl_ui_widget_model_unregister(Eo *obj, Efl_Ui_Widget_Data *pd)
|
|||
{
|
||||
// Remove any existing handler that might exist for any reason
|
||||
efl_event_callback_del(pd->properties.model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
|
||||
_efl_ui_model_property_bind_changed, pd);
|
||||
_efl_ui_model_property_bind_changed, obj);
|
||||
efl_event_callback_del(obj, EFL_UI_PROPERTY_BIND_EVENT_PROPERTIES_CHANGED,
|
||||
_efl_ui_view_property_bind_changed, pd);
|
||||
_efl_ui_view_property_bind_changed, obj);
|
||||
|
||||
pd->properties.registered = EINA_FALSE;
|
||||
}
|
||||
// Invalidate must be called before setting a new model and even if no model is registered
|
||||
if (pd->properties.provider)
|
||||
_efl_ui_widget_model_provider_invalidate(pd, NULL);
|
||||
_efl_ui_widget_model_provider_invalidate(obj, NULL);
|
||||
}
|
||||
|
||||
static Eina_Error
|
||||
|
@ -6001,7 +5999,7 @@ _efl_ui_property_bind(Eo *widget, Eo *target, Efl_Ui_Widget_Data *pd,
|
|||
eina_hash_direct_add(pd->properties.model_lookup, prop->property, prop);
|
||||
eina_hash_direct_add(pd->properties.view_lookup, prop->key, prop);
|
||||
|
||||
_efl_ui_property_bind_get(pd, prop);
|
||||
_efl_ui_property_bind_get(widget, pd, prop);
|
||||
|
||||
efl_event_callback_call(widget, EFL_UI_PROPERTY_BIND_EVENT_PROPERTY_BOUND, (void*) prop->key);
|
||||
// In case of part, we emit it also on the part so that the part too can act on it
|
||||
|
@ -6040,7 +6038,7 @@ _efl_ui_widget_efl_ui_view_model_set(Eo *obj,
|
|||
if (ev.current == pd->properties.model)
|
||||
efl_event_callback_call(obj, EFL_UI_VIEW_EVENT_MODEL_CHANGED, &ev);
|
||||
|
||||
if (pd->properties.model) _efl_ui_widget_model_update(pd);
|
||||
if (pd->properties.model) _efl_ui_widget_model_update(obj, pd);
|
||||
|
||||
efl_unref(ev.current);
|
||||
efl_unref(ev.previous);
|
||||
|
|
|
@ -3192,18 +3192,18 @@ _name_list_cb(void *data,
|
|||
sd->src_name->name_list_parse_cb(name_list);
|
||||
INF("Name List request success address");
|
||||
if (name_list->cb)
|
||||
name_list->cb(name_list->data, wd->obj,
|
||||
name_list->cb(name_list->data, sd->obj,
|
||||
name_list->names);
|
||||
efl_event_callback_legacy_call
|
||||
(wd->obj, ELM_MAP_EVENT_NAME_LOADED, NULL);
|
||||
(sd->obj, ELM_MAP_EVENT_NAME_LOADED, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
ERR("Name List request failed: %d", status);
|
||||
if (name_list->cb)
|
||||
name_list->cb(name_list->data, wd->obj, NULL);
|
||||
name_list->cb(name_list->data, sd->obj, NULL);
|
||||
efl_event_callback_legacy_call
|
||||
(wd->obj, ELM_MAP_EVENT_NAME_LOADED_FAIL, NULL);
|
||||
(sd->obj, ELM_MAP_EVENT_NAME_LOADED_FAIL, NULL);
|
||||
}
|
||||
|
||||
edje_object_signal_emit(wd->resize_obj,
|
||||
|
@ -3306,7 +3306,7 @@ _name_list_request(const Evas_Object *obj,
|
|||
|
||||
fname = _prepare_download();
|
||||
url = sd->src_name->url_cb
|
||||
(wd->obj, method, address, lon, lat);
|
||||
(obj, method, address, lon, lat);
|
||||
if (!url)
|
||||
{
|
||||
ERR("Name URL is NULL");
|
||||
|
@ -3335,7 +3335,7 @@ _name_list_request(const Evas_Object *obj,
|
|||
free(fname);
|
||||
|
||||
efl_event_callback_legacy_call
|
||||
(wd->obj, ELM_MAP_EVENT_NAME_LOAD, name_list->names);
|
||||
((Eo*)obj, ELM_MAP_EVENT_NAME_LOAD, name_list->names);
|
||||
edje_object_signal_emit(wd->resize_obj,
|
||||
"elm,state,busy,start", "elm");
|
||||
return name_list->names;
|
||||
|
|
|
@ -395,7 +395,7 @@ _parent_del_cb(void *data,
|
|||
ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
|
||||
|
||||
evas_object_event_callback_del_full
|
||||
(obj, EVAS_CALLBACK_RESIZE, _parent_resize_cb, wd->obj);
|
||||
(obj, EVAS_CALLBACK_RESIZE, _parent_resize_cb, data);
|
||||
sd->parent = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ _elm_prefs_save(void *data)
|
|||
elm_prefs_data_save(sd->prefs_data, NULL, NULL);
|
||||
|
||||
efl_event_callback_legacy_call
|
||||
(wd->obj, ELM_PREFS_EVENT_PAGE_SAVED, (char *)sd->root->name);
|
||||
(data, ELM_PREFS_EVENT_PAGE_SAVED, (char *)sd->root->name);
|
||||
}
|
||||
|
||||
sd->dirty = EINA_FALSE;
|
||||
|
@ -303,7 +303,7 @@ _elm_prefs_item_changed_report(Eo *obj,
|
|||
snprintf(buf, sizeof(buf), "%s:%s", it->page->name, it->name);
|
||||
|
||||
efl_event_callback_legacy_call
|
||||
(wd->obj, ELM_PREFS_EVENT_ITEM_CHANGED, buf);
|
||||
(obj, ELM_PREFS_EVENT_ITEM_CHANGED, buf);
|
||||
}
|
||||
|
||||
static Elm_Prefs_Item_Node *
|
||||
|
@ -403,7 +403,7 @@ _prefs_data_autosaved_cb(void *cb_data,
|
|||
ELM_WIDGET_DATA_GET_OR_RETURN(cb_data, wd);
|
||||
|
||||
efl_event_callback_legacy_call
|
||||
(wd->obj, ELM_PREFS_EVENT_PAGE_SAVED, event_info);
|
||||
(cb_data, ELM_PREFS_EVENT_PAGE_SAVED, event_info);
|
||||
|
||||
sd->dirty = EINA_FALSE;
|
||||
}
|
||||
|
@ -533,7 +533,7 @@ _item_changed_cb(Evas_Object *it_obj)
|
|||
if (it->type == ELM_PREFS_TYPE_ACTION)
|
||||
{
|
||||
efl_event_callback_legacy_call
|
||||
(wd->obj, ELM_PREFS_EVENT_ACTION, buf);
|
||||
(it->prefs, ELM_PREFS_EVENT_ACTION, buf);
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -321,7 +321,6 @@ typedef void (*Elm_Access_On_Highlight_Cb)(void *data);
|
|||
*/
|
||||
typedef struct _Elm_Widget_Smart_Data
|
||||
{
|
||||
Evas_Object *obj; /**< object pointer for this widget smart data */
|
||||
Evas_Object *parent_obj; /**< parent object of a widget in the elementary tree */
|
||||
Eina_List *subobjs; /**< list of widgets' sub objects in the elementary tree */
|
||||
Evas_Object *resize_obj; /**< an unique object for each widget that shows the look of a widget. Resize object's geometry is same as the widget. This resize object is different from that of window's resize object. */
|
||||
|
|
Loading…
Reference in New Issue