X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Flib%2Felc_popup.c;h=1013f4946582d7d2604508f755ebf0e079f368af;hb=1d0aa805ddc0b3efa007581eaa0b37690fd22f4f;hp=fbb57e4894e1b98b1b2c51d58836527a95e945a6;hpb=94dcfa1e2e38aee503004c8667bb317797a28c86;p=framework%2Fuifw%2Felementary.git diff --git a/src/lib/elc_popup.c b/src/lib/elc_popup.c index fbb57e4..1013f49 100644 --- a/src/lib/elc_popup.c +++ b/src/lib/elc_popup.c @@ -98,6 +98,10 @@ static Evas_Object *_action_button_get(Evas_Object *obj, unsigned int idx); static Evas_Object *_action_button_unset(Evas_Object *obj, unsigned int idx); static void _button_remove(Evas_Object *obj, Evas_Object *content, Eina_Bool delete); +static void _popup_show(void *data, Evas *e, Evas_Object *obj, + void *event_info); +static void _popup_hide(void *data, Evas *e, Evas_Object *obj, + void *event_info); static const char SIG_BLOCK_CLICKED[] = "block,clicked"; static const char SIG_TIMEOUT[] = "timeout"; static const Evas_Smart_Cb_Description _signals[] = { @@ -147,6 +151,7 @@ _del_pre_hook(Evas_Object *obj) evas_object_smart_callback_del(wd->notify, "timeout", _timeout); evas_object_event_callback_del(wd->notify, EVAS_CALLBACK_RESIZE, _notify_resize); + evas_object_event_callback_del(obj, EVAS_CALLBACK_SHOW, _popup_show); wd->button_count = 0; for (i = 0; i < ELM_POPUP_ACTION_BUTTON_MAX; i++) if (wd->buttons[i]) @@ -201,8 +206,8 @@ _theme_hook(Evas_Object *obj) "item", elm_widget_style_get(obj)); if (item->label) { - edje_object_part_text_set(VIEW(item), "elm.text", - item->label); + edje_object_part_text_escaped_set(VIEW(item), "elm.text", + item->label); edje_object_signal_emit(VIEW(item), "elm,state,item,text,visible", "elm"); } @@ -737,6 +742,7 @@ _content_set(Evas_Object *obj, Evas_Object *content) wd->content_area); elm_object_part_content_set(wd->content_area, "elm.swallow.content", content); + evas_object_show(content); } _sizing_eval(obj); } @@ -776,11 +782,14 @@ _button_remove(Evas_Object *obj, Evas_Object *content, Eina_Bool delete) elm_object_part_content_unset(wd->action_area, buf); elm_object_part_content_set(wd->action_area, buf, wd->buttons[i]->btn); + evas_object_show(wd->buttons[i]->btn); wd->buttons[i]->delete_me = EINA_TRUE; } if (!wd->button_count) { _layout_set(obj); + elm_object_part_content_unset(wd->base, "elm.swallow.action_area"); + evas_object_hide(wd->action_area); edje_object_message_signal_process(elm_layout_edje_get(wd->base)); } else @@ -829,6 +838,7 @@ _action_button_set(Evas_Object *obj, Evas_Object *btn, unsigned int idx) elm_object_part_content_unset(wd->action_area, buf); elm_object_part_content_set(wd->action_area, buf, wd->buttons[i]->btn); + evas_object_show(wd->buttons[i]->btn); /* Setting delete_me to TRUE in order to let _sub_del handle it if deleted externally and update the buttons array after freeing action data allocated earlier. @@ -837,6 +847,7 @@ _action_button_set(Evas_Object *obj, Evas_Object *btn, unsigned int idx) } elm_object_part_content_set(wd->base, "elm.swallow.action_area", wd->action_area); + evas_object_show(wd->action_area); if (wd->button_count == 1) _layout_set(obj); edje_object_message_signal_process(wd->base); @@ -1022,19 +1033,22 @@ _content_unset_hook(Evas_Object *obj, const char *part) } static Eina_Bool -_focus_next_hook(const Evas_Object *obj __UNUSED__, - Elm_Focus_Direction dir __UNUSED__, - Evas_Object **next __UNUSED__) +_focus_next_hook(const Evas_Object *obj, + Elm_Focus_Direction dir, + Evas_Object **next) { - //TODO: Implement Focus chanin Handling in Popup for action area buttons - return EINA_FALSE; + Widget_Data *wd = elm_widget_data_get(obj); + + if (!wd) + return EINA_FALSE; + return elm_widget_focus_next_get(wd->notify, dir, next); } static void _item_text_set(Elm_Popup_Content_Item *item, const char *label) { if (!eina_stringshare_replace(&item->label, label)) return; - edje_object_part_text_set(VIEW(item), "elm.text", label); + edje_object_part_text_escaped_set(VIEW(item), "elm.text", label); if (item->label) edje_object_signal_emit(VIEW(item), "elm,state,item,text,visible", "elm"); @@ -1206,6 +1220,18 @@ _popup_show(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, evas_object_show(wd->notify); } +static void +_popup_hide(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, + void *event_info __UNUSED__) +{ + Widget_Data *wd; + + wd = elm_widget_data_get(obj); + if (!wd) return; + + evas_object_hide(wd->notify); +} + EAPI Evas_Object * elm_popup_add(Evas_Object *parent) { @@ -1227,6 +1253,7 @@ elm_popup_add(Evas_Object *parent) elm_widget_content_set_hook_set(obj, _content_set_hook); elm_widget_content_get_hook_set(obj, _content_get_hook); elm_widget_content_unset_hook_set(obj,_content_unset_hook); + elm_widget_can_focus_set(obj, EINA_FALSE); elm_widget_focus_next_hook_set(obj, _focus_next_hook); evas_object_smart_callbacks_descriptions_set(obj, _signals); @@ -1243,6 +1270,8 @@ elm_popup_add(Evas_Object *parent) _notify_resize, obj); evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _popup_show, NULL); + evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, _popup_hide, + NULL); evas_object_event_callback_add(obj, EVAS_CALLBACK_RESTACK, _restack, NULL); wd->base = elm_layout_add(obj); evas_object_size_hint_weight_set(wd->base, EVAS_HINT_EXPAND,