raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=56e96cf9ab7137d6ebd0c6fad1eaa97cf00da4b4

commit 56e96cf9ab7137d6ebd0c6fad1eaa97cf00da4b4
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Thu Mar 4 17:20:52 2021 +0000

    tasks - handle win del when it iconifies
---
 src/modules/tasks/e_mod_main.c | 31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/src/modules/tasks/e_mod_main.c b/src/modules/tasks/e_mod_main.c
index b2ce9c42e..6767ecf21 100644
--- a/src/modules/tasks/e_mod_main.c
+++ b/src/modules/tasks/e_mod_main.c
@@ -54,6 +54,7 @@ struct _Tasks_Item
    Eina_Bool urgent E_BITFIELD;
    Eina_Bool iconified E_BITFIELD;
    Eina_Bool iconifying E_BITFIELD;
+   Eina_Bool delete_me E_BITFIELD;
 };
 
 static Tasks       *_tasks_new(Evas *e, E_Zone *zone, const char *id);
@@ -336,13 +337,14 @@ _tasks_cb_iconify_end_cb(void *data, Evas_Object *obj 
EINA_UNUSED, const char *s
    Tasks_Item *item = data;
    E_Client *ec = item->client;
 
-   if (!ec) return;
-
-   evas_object_layer_set(ec->frame, ec->layer);
    ec->layer_block = 0;
-   if (ec->iconic)
-     evas_object_hide(ec->frame);
+   if (ec)
+     {
+        evas_object_layer_set(ec->frame, ec->layer);
+        if (ec->iconic) evas_object_hide(ec->frame);
+     }
    item->iconifying = 0;
+   if (item->delete_me) free(item);
 }
 
 static Eina_Bool
@@ -657,13 +659,26 @@ _tasks_item_preview_del(Tasks_Item *item)
 static void
 _tasks_item_free(Tasks_Item *item)
 {
-   if (item->o_icon) evas_object_del(item->o_icon);
+   if (item->o_icon)
+     {
+        evas_object_del(item->o_icon);
+        item->o_icon = NULL;
+     }
    if (e_object_is_del(E_OBJECT(item->client)))
      item->tasks->clients = eina_list_remove(item->tasks->clients, 
item->client);
    e_object_unref(E_OBJECT(item->client));
    _tasks_item_preview_del(item);
-   evas_object_del(item->o_item);
-   free(item);
+   if (item->o_item)
+     {
+        evas_object_del(item->o_item);
+        item->o_item = NULL;
+     }
+   item->client = NULL;
+   item->tasks = NULL;
+   if (item->iconifying)
+     item->delete_me = EINA_TRUE;
+   else
+     free(item);
 }
 
 static void

-- 


Reply via email to