From ed6cd22ddf66b4c6ffceec9dcee2998a08c558fa Mon Sep 17 00:00:00 2001 From: Bruno Dilly Date: Thu, 11 Nov 2010 18:04:08 +0000 Subject: [PATCH] Fix bubble corner and theme hook issues SVN revision: 54466 --- legacy/elementary/src/lib/Elementary.h.in | 1 + legacy/elementary/src/lib/elm_bubble.c | 51 +++++++++++++++++------ 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index b6f7692e5f..b28c9f2468 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -1232,6 +1232,7 @@ extern "C" { EAPI Evas_Object *elm_bubble_icon_get(const Evas_Object *obj); EAPI Evas_Object *elm_bubble_icon_unset(Evas_Object *obj); EAPI void elm_bubble_corner_set(Evas_Object *obj, const char *corner); + EAPI const char* elm_bubble_corner_get(const Evas_Object *obj); /* smart callbacks called: */ diff --git a/legacy/elementary/src/lib/elm_bubble.c b/legacy/elementary/src/lib/elm_bubble.c index 9095e81628..06352e4386 100644 --- a/legacy/elementary/src/lib/elm_bubble.c +++ b/legacy/elementary/src/lib/elm_bubble.c @@ -14,7 +14,7 @@ struct _Widget_Data { Evas_Object *bbl; Evas_Object *content, *icon; - const char *label, *info; + const char *label, *info, *corner; }; static const char *widtype = NULL; @@ -31,6 +31,7 @@ _del_hook(Evas_Object *obj) if (!wd) return; if (wd->label) eina_stringshare_del(wd->label); if (wd->info) eina_stringshare_del(wd->info); + if (wd->corner) eina_stringshare_del(wd->corner); free(wd); } @@ -39,18 +40,21 @@ _theme_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - _elm_theme_object_set(obj, wd->bbl, "bubble", "base", elm_widget_style_get(obj)); + _elm_theme_object_set(obj, wd->bbl, "bubble", wd->corner, + elm_widget_style_get(obj)); edje_object_part_text_set(wd->bbl, "elm.text", wd->label); edje_object_part_text_set(wd->bbl, "elm.info", wd->info); if (wd->content) { edje_object_part_swallow(wd->bbl, "elm.swallow.content", wd->content); - edje_object_signal_emit(wd->bbl, "elm,state,icon,visible", "elm"); edje_object_message_signal_process(wd->bbl); } + if (wd->icon) + edje_object_signal_emit(wd->bbl, "elm,state,icon,visible", "elm"); else - edje_object_signal_emit(wd->bbl, "elm,state,icon,hidden", "elm"); - edje_object_scale_set(wd->bbl, elm_widget_scale_get(obj) * _elm_config->scale); + edje_object_signal_emit(wd->bbl, "elm,state,icon,hidden", "elm"); + edje_object_scale_set(wd->bbl, + elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } @@ -135,6 +139,8 @@ elm_bubble_add(Evas_Object *parent) elm_widget_focus_next_hook_set(obj, _elm_bubble_focus_next_hook); elm_widget_can_focus_set(obj, EINA_FALSE); + wd->corner = eina_stringshare_add("base"); + wd->bbl = edje_object_add(e); _elm_theme_object_set(obj, wd->bbl, "bubble", "base", "default"); elm_widget_resize_object_set(obj, wd->bbl); @@ -396,6 +402,11 @@ elm_bubble_icon_unset(Evas_Object *obj) * @param corner The given corner for the bubble. * * This function sets the corner of the bubble. + * The corner will be used to find the group in the theme + * For example, if you set the corner to "bottom_right", + * the following group will be searched: + * "elm/bubble/bottom_right/default", + * considering default style. * * @ingroup Bubble */ @@ -404,12 +415,26 @@ elm_bubble_corner_set(Evas_Object *obj, const char *corner) { ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); - if (!wd) return; - _elm_theme_object_set(obj, wd->bbl, "bubble", corner, elm_widget_style_get(obj)); - if (wd->icon) - edje_object_part_swallow(wd->bbl, "elm.swallow.icon", wd->icon); - if (wd->content) - edje_object_part_swallow(wd->bbl, "elm.swallow.content", wd->content); - // FIXME: fix label etc. - _sizing_eval(obj); + if ((!wd) || (!corner)) return; + eina_stringshare_replace(&wd->corner, corner); + _theme_hook(obj); +} + +/** + * Get the corner of the bubble + * + * @param obj The bubble object. + * @return The given corner for the bubble. + * + * This function gets the corner of the bubble. + * + * @ingroup Bubble + */ +EAPI const char* +elm_bubble_corner_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->corner; }