elm_hoversel: fix to show dismiss animation

Summary:
In hover.edc, hoversel dismiss animations are defined,
but it doesn't work at all. (Hover is removed before animation)
This patch makes hoversel remove its hover after dismiss animation.

@fix

Test Plan: elementary_test hoversel

Reviewers: Hermet, cedric

Reviewed By: cedric

Subscribers: woohyun

Differential Revision: https://phab.enlightenment.org/D3070

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
Jee-Yong Um 2015-10-12 13:22:26 -07:00 committed by Cedric BAIL
parent d1bc1b64ae
commit acccd9e10e
2 changed files with 70 additions and 12 deletions

View File

@ -93,10 +93,15 @@ _elm_hoversel_elm_widget_theme_apply(Eo *obj, Elm_Hoversel_Data *sd)
static Eina_Bool
_on_hover_clicked(void *data EINA_UNUSED,
Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED,
Eo *obj, const Eo_Event_Description *desc EINA_UNUSED,
void *event_info EINA_UNUSED)
{
elm_hoversel_hover_end(data);
const char *dismissstr;
dismissstr = edje_object_data_get(elm_layout_edje_get(obj), "dismiss");
if (!dismissstr || strcmp(dismissstr, "on"))
elm_hoversel_hover_end(data); // for backward compatibility
return EINA_TRUE;
}
@ -322,6 +327,37 @@ _resizing_eval(Evas_Object *obj, Elm_Hoversel_Data *sd)
evas_object_size_hint_min_set(sd->spacer, ww, hh);
}
static void
_hover_end_finished(void *data,
Evas_Object *obj EINA_UNUSED,
const char *emission EINA_UNUSED,
const char *source EINA_UNUSED)
{
Elm_Object_Item *eo_item;
Eina_List *l;
const char *dismissstr;
ELM_HOVERSEL_DATA_GET(data, sd);
dismissstr = edje_object_data_get(elm_layout_edje_get(sd->hover), "dismiss");
if (dismissstr && !strcmp(dismissstr, "on"))
{
sd->expanded = EINA_FALSE;
EINA_LIST_FOREACH(sd->items, l, eo_item)
{
ELM_HOVERSEL_ITEM_DATA_GET(eo_item, it);
VIEW(it) = NULL;
}
ELM_SAFE_FREE(sd->hover, evas_object_del);
sd->scr = NULL;
sd->last_location = NULL;
eo_do(obj, eo_event_callback_call(ELM_HOVERSEL_EVENT_DISMISSED, NULL));
}
}
static void
_activate(Evas_Object *obj)
{
@ -355,6 +391,8 @@ _activate(Evas_Object *obj)
eo_do(sd->hover, eo_event_callback_add
(EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, _on_hover_clicked, obj));
elm_layout_signal_callback_add
(sd->hover, "elm,action,hide,finished", "elm", _hover_end_finished, obj);
elm_hover_target_set(sd->hover, obj);
/* hover's content */
@ -695,23 +733,38 @@ _elm_hoversel_hover_begin(Eo *obj, Elm_Hoversel_Data *sd)
EOLIAN static void
_elm_hoversel_hover_end(Eo *obj, Elm_Hoversel_Data *sd)
{
Elm_Object_Item *eo_item;
Eina_List *l;
const char *dismissstr;
if (!sd->hover) return;
sd->expanded = EINA_FALSE;
dismissstr = edje_object_data_get(elm_layout_edje_get(sd->hover), "dismiss");
EINA_LIST_FOREACH(sd->items, l, eo_item)
if (dismissstr && !strcmp(dismissstr, "on"))
{
ELM_HOVERSEL_ITEM_DATA_GET(eo_item, it);
VIEW(it) = NULL;
}
ELM_SAFE_FREE(sd->hover, evas_object_del);
sd->scr = NULL;
sd->last_location = NULL;
elm_hover_dismiss(sd->hover);
eo_do(obj, eo_event_callback_call(ELM_HOVERSEL_EVENT_DISMISSED, NULL));
}
else
{
sd->expanded = EINA_FALSE;
EINA_LIST_FOREACH(sd->items, l, eo_item)
{
ELM_HOVERSEL_ITEM_DATA_GET(eo_item, it);
VIEW(it) = NULL;
}
ELM_SAFE_FREE(sd->hover, evas_object_del);
sd->scr = NULL;
sd->last_location = NULL;
eo_do(obj, eo_event_callback_call(ELM_HOVERSEL_EVENT_DISMISSED, NULL));
} // for backward compatibility
}
EOLIAN static Eina_Bool

View File

@ -808,7 +808,12 @@ _elm_hover_best_content_location_get(const Eo *obj EINA_UNUSED, Elm_Hover_Data *
EOLIAN static void
_elm_hover_dismiss(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED)
{
elm_layout_signal_emit(obj, "elm,action,dismiss", ""); // XXX: for compat
const char *dismissstr;
dismissstr = edje_object_data_get(elm_layout_edje_get(obj), "dismiss");
if (!dismissstr || strcmp(dismissstr, "on"))
elm_layout_signal_emit(obj, "elm,action,dismiss", ""); // XXX: for compat
elm_layout_signal_emit(obj, "elm,action,dismiss", "elm");
}