aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2016-04-07 14:04:21 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2016-04-07 14:19:25 -0400
commit6a1c46613687a358b5a11a129beb66374439e1b4 (patch)
tree0add1b1fd0665a3846988a65cad647691af4e1d3 /src
parentelm_win: move frame obj creation/deletion for fullscreen property to state ch... (diff)
downloadefl-6a1c46613687a358b5a11a129beb66374439e1b4.tar.gz
elm_win: handle icon object lifetimes more accurately, use icon_name in csd icon
in the case where an icon existed upon having an icon object set, the previous icon object would be orphaned while still being visible. the new icon would then never be set into the csd. @fix
Diffstat (limited to 'src')
-rw-r--r--src/lib/elementary/elm_win.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/lib/elementary/elm_win.c b/src/lib/elementary/elm_win.c
index 04bed5ae3e..1cdf6b8fcd 100644
--- a/src/lib/elementary/elm_win.c
+++ b/src/lib/elementary/elm_win.c
@@ -3102,17 +3102,25 @@ _elm_win_frame_add(Elm_Win_Data *sd, const char *style)
evas_object_is_frame_object_set(sd->frame_obj, EINA_TRUE);
- if (!sd->icon)
+ if (sd->icon)
+ evas_object_show(sd->icon);
+ else
{
- Efreet_Desktop *d;
+ Eina_Bool set = EINA_FALSE;
sd->icon = elm_icon_add(sd->obj);
- d = efreet_util_desktop_exec_find(_elm_appname);
- if (d)
+ if (sd->icon_name)
+ set = elm_icon_standard_set(sd->icon, sd->icon_name);
+ if ((!sd->icon_name) || (!set))
{
- elm_icon_standard_set(sd->icon, d->icon);
- efreet_desktop_free(d);
+ Efreet_Desktop *d;
+ d = efreet_util_desktop_exec_find(_elm_appname);
+ if (d)
+ {
+ elm_icon_standard_set(sd->icon, d->icon);
+ efreet_desktop_free(d);
+ }
}
}
@@ -3210,6 +3218,7 @@ _elm_win_frame_del(Elm_Win_Data *sd)
ELM_SAFE_FREE(sd->frame_obj, evas_object_del);
}
+ if (sd->icon) evas_object_hide(sd->icon);
evas_output_framespace_set(sd->evas, 0, 0, 0, 0);
ecore_evas_geometry_get(sd->ee, NULL, NULL, &w, &h);
@@ -4205,12 +4214,17 @@ EOLIAN static void
_elm_win_icon_object_set(Eo *obj, Elm_Win_Data *sd, Evas_Object *icon)
{
if (sd->icon)
- evas_object_event_callback_del_full
- (sd->icon, EVAS_CALLBACK_DEL, _elm_win_on_icon_del, obj);
+ evas_object_event_callback_del_full(sd->icon, EVAS_CALLBACK_DEL,
+ _elm_win_on_icon_del, obj);
+ evas_object_del(sd->icon);
sd->icon = icon;
if (sd->icon)
- evas_object_event_callback_add
- (sd->icon, EVAS_CALLBACK_DEL, _elm_win_on_icon_del, obj);
+ {
+ evas_object_event_callback_add(sd->icon, EVAS_CALLBACK_DEL,
+ _elm_win_on_icon_del, obj);
+ if (sd->frame_obj)
+ edje_object_part_swallow(sd->frame_obj, "elm.swallow.icon", sd->icon);
+ }
#ifdef HAVE_ELEMENTARY_X
_elm_win_xwin_update(sd);
#endif