remove subc from subsurface list of parent when subc destoryed 81/45681/1 accepted/tizen/mobile/20150811.013621 accepted/tizen/tv/20150811.013633 accepted/tizen/wearable/20150811.013649 submit/tizen/20150810.055113
authorBoram Park <boram1288.park@samsung.com>
Mon, 10 Aug 2015 08:20:46 +0000 (17:20 +0900)
committerBoram Park <boram1288.park@samsung.com>
Mon, 10 Aug 2015 09:18:14 +0000 (18:18 +0900)
Change-Id: Iedc5ab225da7940f35d67b41c0794ea554b90512

src/bin/e_comp_wl.c

index c4bc8a3..d2fc9d5 100644 (file)
@@ -2986,15 +2986,32 @@ _e_comp_wl_client_cb_del(void *data EINA_UNUSED, E_Client *ec)
         e_pixmap_parent_window_set(ec->pixmap, 0);
      }
 
+   if (ec->comp_data->sub.data)
+     {
+        E_Comp_Wl_Subsurf_Data *sdata = ec->comp_data->sub.data;
+        if (sdata->parent && sdata->parent->comp_data)
+          {
+             /* remove this client from parents sub list */
+             sdata->parent->comp_data->sub.list =
+               eina_list_remove(sdata->parent->comp_data->sub.list, ec);
+             sdata->parent->comp_data->sub.list_pending =
+               eina_list_remove(sdata->parent->comp_data->sub.list_pending, ec);
+             sdata->parent->comp_data->sub.below_list =
+               eina_list_remove(sdata->parent->comp_data->sub.below_list, ec);
+             sdata->parent->comp_data->sub.below_list_pending =
+               eina_list_remove(sdata->parent->comp_data->sub.below_list_pending, ec);
+          }
+     }
+
    /* remove sub list */
    EINA_LIST_FREE(ec->comp_data->sub.list, subc)
-     subc->comp_data->sub.data->parent = NULL;
+     if (subc->comp_data && subc->comp_data->sub.data) subc->comp_data->sub.data->parent = NULL;
    EINA_LIST_FREE(ec->comp_data->sub.list_pending, subc)
-     subc->comp_data->sub.data->parent = NULL;
+     if (subc->comp_data && subc->comp_data->sub.data) subc->comp_data->sub.data->parent = NULL;
    EINA_LIST_FREE(ec->comp_data->sub.below_list, subc)
-     subc->comp_data->sub.data->parent = NULL;
+     if (subc->comp_data && subc->comp_data->sub.data) subc->comp_data->sub.data->parent = NULL;
    EINA_LIST_FREE(ec->comp_data->sub.below_list_pending, subc)
-     subc->comp_data->sub.data->parent = NULL;
+     if (subc->comp_data && subc->comp_data->sub.data) subc->comp_data->sub.data->parent = NULL;
 
    if ((ec->parent) && (ec->parent->modal == ec))
      {