One of the Four Horsemen for Cedric.

Let's have the content_hook thing for entry actually work, and if the
icon setters use that instead of having an entirely different code it may
also be a good idea.


SVN revision: 63999
This commit is contained in:
Iván Briano 2011-10-12 02:49:23 +00:00
parent 5e2e8d079e
commit 52194cd52f
1 changed files with 72 additions and 74 deletions

View File

@ -107,7 +107,6 @@ static void _theme_hook(Evas_Object *obj);
static void _disable_hook(Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void _on_focus_hook(void *data, Evas_Object *obj);
static void _content_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__);
static void _content_set_hook(Evas_Object *obj, const char *part, Evas_Object *content);
static Evas_Object *_content_unset_hook(Evas_Object *obj, const char *part);
static Evas_Object *_content_get_hook(const Evas_Object *obj, const char *part);
@ -773,26 +772,31 @@ _on_focus_hook(void *data __UNUSED__, Evas_Object *obj)
}
}
static void
_content_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
elm_widget_sub_object_del(data, obj);
edje_object_part_unswallow(wd->ent, obj);
}
static void
_content_set_hook(Evas_Object *obj, const char *part, Evas_Object *content)
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *edje;
if ((!wd) || (!content)) return;
edje = elm_smart_scroller_edje_object_get(wd->scroller);
if (!strcmp(part, "elm.swallow.icon"))
{
if (wd->icon)
evas_object_del(wd->icon);
wd->icon = content;
edje_object_signal_emit(edje, "elm,action,show,icon", "elm");
}
else if (!strcmp(part, "elm.swallow.end"))
{
if (wd->end)
evas_object_del(wd->end);
wd->end = content;
edje_object_signal_emit(edje, "elm,action,show,end", "elm");
}
evas_event_freeze(evas_object_evas_get(obj));
elm_widget_sub_object_add(obj, content);
evas_object_event_callback_add(content, EVAS_CALLBACK_DEL, _content_del, obj);
edje_object_part_swallow(wd->ent, part, content);
edje_object_part_swallow(edje, part, content);
_sizing_eval(obj);
evas_event_thaw(evas_object_evas_get(obj));
evas_event_thaw_eval(evas_object_evas_get(obj));
@ -802,14 +806,26 @@ static Evas_Object *
_content_unset_hook(Evas_Object *obj, const char *part)
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *content;
Evas_Object *content, *edje;
if (!wd) return NULL;
content = (Evas_Object *)edje_object_part_object_get(wd->ent, part);
edje = elm_smart_scroller_edje_object_get(wd->scroller);
if (!strcmp(part, "elm.swallow.icon"))
{
wd->icon = NULL;
edje_object_signal_emit(edje, "elm,action,hide,icon", "elm");
}
else if (!strcmp(part, "elm.swallow.end"))
{
wd->end = NULL;
edje_object_signal_emit(edje, "elm,action,hide,end", "elm");
}
content = edje_object_part_swallow_get(edje, part);
edje_object_part_swallow(edje, part, NULL);
if (!content) return NULL;
evas_event_freeze(evas_object_evas_get(obj));
elm_widget_sub_object_del(obj, content);
evas_object_event_callback_del(content, EVAS_CALLBACK_DEL, _content_del);
edje_object_part_unswallow(wd->ent, content);
_sizing_eval(obj);
evas_event_thaw(evas_object_evas_get(obj));
@ -822,10 +838,17 @@ static Evas_Object *
_content_get_hook(const Evas_Object *obj, const char *part)
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *content;
Evas_Object *content = NULL, *edje;
if (!wd) return NULL;
content = (Evas_Object *)edje_object_part_object_get(wd->ent, part);
if (!strcmp(part, "elm.swallow.icon"))
return wd->icon;
if (!strcmp(part, "elm.swallow.end"))
return wd->end;
edje = elm_smart_scroller_edje_object_get(wd->scroller);
if (edje)
content = edje_object_part_swallow_get(edje, part);
return content;
}
@ -888,6 +911,29 @@ _show_region_hook(void *data, Evas_Object *obj)
elm_smart_scroller_child_region_show(wd->scroller, x, y, w, h);
}
static void
_sub_del(void *data, Evas_Object *obj, void *event_info)
{
Widget_Data *wd = data;
Evas_Object *sub = event_info;
Evas_Object *edje;
edje = elm_smart_scroller_edje_object_get(wd->scroller);
if (sub == wd->icon)
{
wd->icon = NULL;
if (edje)
edje_object_signal_emit(edje, "elm,action,hide,icon", "elm");
}
else if (sub == wd->end)
{
wd->end = NULL;
if (edje)
edje_object_signal_emit(edje, "elm,action,hide,end", "elm");
}
_sizing_eval(obj);
}
static void
_hoversel_position(Evas_Object *obj)
{
@ -2113,6 +2159,8 @@ elm_entry_add(Evas_Object *parent)
elm_widget_content_unset_hook_set(obj, _content_unset_hook);
elm_widget_content_get_hook_set(obj, _content_get_hook);
evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, wd);
wd->scroller = elm_smart_scroller_add(e);
elm_widget_sub_object_add(obj, wd->scroller);
evas_object_smart_member_add(wd->scroller, obj);
@ -3067,47 +3115,22 @@ EAPI void
elm_entry_icon_set(Evas_Object *obj, Evas_Object *icon)
{
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *edje;
if (!wd) return;
EINA_SAFETY_ON_NULL_RETURN(icon);
if (wd->icon == icon) return;
if (wd->icon) evas_object_del(wd->icon);
wd->icon = icon;
edje = elm_smart_scroller_edje_object_get(wd->scroller);
if (!edje) return;
edje_object_part_swallow(edje, "elm.swallow.icon", wd->icon);
edje_object_signal_emit(edje, "elm,action,show,icon", "elm");
_sizing_eval(obj);
_content_set_hook(obj, "elm.swallow.icon", icon);
}
EAPI Evas_Object *
elm_entry_icon_get(const Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
return wd->icon;
return _content_get_hook(obj, "elm.swallow.icon");
}
EAPI Evas_Object *
elm_entry_icon_unset(Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *ret = NULL;
if (!wd) return NULL;
if (wd->icon)
{
Evas_Object *edje = elm_smart_scroller_edje_object_get(wd->scroller);
if (!edje) return NULL;
ret = wd->icon;
edje_object_part_unswallow(edje, wd->icon);
edje_object_signal_emit(edje, "elm,action,hide,icon", "elm");
wd->icon = NULL;
_sizing_eval(obj);
}
return ret;
return _content_unset_hook(obj, "elm.swallow.icon");
}
EAPI void
@ -3130,47 +3153,22 @@ EAPI void
elm_entry_end_set(Evas_Object *obj, Evas_Object *end)
{
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *edje;
if (!wd) return;
EINA_SAFETY_ON_NULL_RETURN(end);
if (wd->end == end) return;
if (wd->end) evas_object_del(wd->end);
wd->end = end;
edje = elm_smart_scroller_edje_object_get(wd->scroller);
if (!edje) return;
edje_object_part_swallow(edje, "elm.swallow.end", wd->end);
edje_object_signal_emit(edje, "elm,action,show,end", "elm");
_sizing_eval(obj);
_content_set_hook(obj, "elm.swallow.end", end);
}
EAPI Evas_Object *
elm_entry_end_get(const Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
return wd->end;
return _content_get_hook(obj, "elm.swallow.end");
}
EAPI Evas_Object *
elm_entry_end_unset(Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *ret = NULL;
if (!wd) return NULL;
if (wd->end)
{
Evas_Object *edje = elm_smart_scroller_edje_object_get(wd->scroller);
if (!edje) return NULL;
ret = wd->end;
edje_object_part_unswallow(edje, wd->end);
edje_object_signal_emit(edje, "elm,action,hide,end", "elm");
wd->end = NULL;
_sizing_eval(obj);
}
return ret;
return _content_unset_hook(obj, "elm.swallow.end");
}
EAPI void