when we get a request to close client app, defer resource deletion
authorChris Michael <cp.michael@samsung.com>
Mon, 2 Mar 2015 20:41:46 +0000 (15:41 -0500)
committerChris Michael <cp.michael@samsung.com>
Mon, 2 Mar 2015 20:42:26 +0000 (15:42 -0500)
until After close animation has been run

Signed-off-by: Chris Michael <cp.michael@samsung.com>
src/bin/e_comp_wl.c
src/bin/e_comp_wl.h

index a52d0a6af0a1bbe2ab4b7cf63d5019d15d8b0b14..a386a6f96aace551796d39b76494bdbc270492de 100644 (file)
@@ -148,6 +148,9 @@ _e_comp_wl_evas_cb_hide(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EIN
 
    EINA_LIST_FOREACH(ec->e.state.video_child, l, tmp)
      evas_object_hide(tmp->frame);
+
+   if ((ec->comp_data) && (ec->comp_data->delete_me))
+     wl_resource_destroy(ec->comp_data->surface);
 }
 
 static void
@@ -1143,8 +1146,21 @@ unmapped:
 static void
 _e_comp_wl_surface_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
 {
+   E_Pixmap *ep;
+   E_Client *ec;
+
    DBG("Surface Cb Destroy: %d", wl_resource_get_id(resource));
-   wl_resource_destroy(resource);
+
+   if (!(ep = wl_resource_get_user_data(resource))) return;
+   if (!(ec = e_pixmap_client_get(ep))) return;
+
+   if (ec->comp_data)
+     {
+        ec->comp_data->delete_me = EINA_TRUE;
+        evas_object_hide(ec->frame);
+     }
+   else
+     wl_resource_destroy(resource);
 }
 
 static void
@@ -1343,7 +1359,6 @@ _e_comp_wl_surface_destroy(struct wl_resource *resource)
    if (!(ec = e_pixmap_client_get(ep)))
      return;
 
-   evas_object_hide(ec->frame);
    e_object_del(E_OBJECT(ec));
 }
 
index 85e50049343b92ccbce40eb0a75f2526a496ba71..c7e2f041990aba132ebfc945f035cf54141da5df 100644 (file)
@@ -252,6 +252,7 @@ struct _E_Comp_Wl_Client_Data
         int32_t x, y;
      } popup;
 
+   Eina_Bool delete_me : 1;
    Eina_Bool keep_buffer : 1;
    Eina_Bool mapped : 1;
    Eina_Bool change_icon : 1;