discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=6a1c46613687a358b5a11a129beb66374439e1b4

commit 6a1c46613687a358b5a11a129beb66374439e1b4
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Thu Apr 7 14:04:21 2016 -0400

    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
---
 src/lib/elementary/elm_win.c | 34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git a/src/lib/elementary/elm_win.c b/src/lib/elementary/elm_win.c
index 04bed5a..1cdf6b8 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

-- 


Reply via email to