xdg_shell_v6: Destroy E_Desktop_Tolevel 86/323186/1
authorSeunghun Lee <shiin.lee@samsung.com>
Tue, 1 Apr 2025 02:53:00 +0000 (11:53 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 24 Apr 2025 02:15:34 +0000 (11:15 +0900)
E_Desktop_Toplevel should be destroyed with E_Desktop_Xdg_Toplevel_V6.

Change-Id: I5758bcae6e688f4ac41686fb24785272e2bdfe7a

src/bin/server/e_desktop_shell.c
src/bin/server/e_desktop_shell_private.h
src/bin/server/e_desktop_xdg_shell_v6.c

index c8dad8dc89dde3b080a16e8798869fece52233ce..c4e51e218528e6ce9a4f980f17f35410d71d7eaa 100644 (file)
@@ -111,7 +111,6 @@ static void _surface_finish(E_Desktop_Surface *surface);
 static void
 _toplevel_destroy(E_Desktop_Toplevel *toplevel)
 {
-   e_shell_e_client_destroy(e_surface_ec_get(toplevel->surface.surface));
    _surface_finish(&toplevel->surface);
    free(toplevel);
 }
@@ -129,7 +128,7 @@ _surface_cb_surface_destroy(struct wl_listener *listener, void *data)
 {
    E_Desktop_Surface *surface = wl_container_of(listener, surface, surface_destroy);
 
-   _toplevel_destroy(_toplevel_from_surface(surface));
+   _surface_finish(surface);
 }
 
 static void
@@ -144,6 +143,10 @@ _surface_init(E_Desktop_Surface *surface, E_Surface *e_surface, E_Desktop_Surfac
 static void
 _surface_finish(E_Desktop_Surface *surface)
 {
+   if (!surface->surface)
+     return;
+
+   e_shell_e_client_destroy(e_surface_ec_get(surface->surface));
    wl_list_remove(&surface->surface_destroy.link);
    surface->iface = NULL;
    surface->surface = NULL;
@@ -259,6 +262,12 @@ e_desktop_toplevel_try_from_surface(E_Surface *e_surface)
    return _toplevel_from_surface(surface);
 }
 
+EINTERN void
+e_desktop_toplevel_destroy(E_Desktop_Toplevel *toplevel)
+{
+   _toplevel_destroy(toplevel);
+}
+
 EINTERN void
 e_desktop_toplevel_title_set(E_Desktop_Toplevel *toplevel, const char *title)
 {
index afddd3ed9a8510daed18cd3365bd477662a35e06..a4c32bbfd88f97f80f1360056d89c851ef5f1e3b 100644 (file)
@@ -16,6 +16,7 @@ struct _E_Desktop_Surface_Interface
 
 E_Desktop_Toplevel *e_desktop_shell_toplevel_create(E_Desktop_Shell *shell, E_Surface *e_surface, E_Desktop_Surface_Interface *iface, struct wl_resource *shell_surface_resource);
 
+void e_desktop_toplevel_destroy(E_Desktop_Toplevel *toplevel);
 void e_desktop_toplevel_title_set(E_Desktop_Toplevel *toplevel, const char *title);
 void e_desktop_toplevel_app_id_set(E_Desktop_Toplevel *toplevel, const char *app_id);
 void e_desktop_toplevel_parent_set(E_Desktop_Toplevel *toplevel, E_Desktop_Toplevel *parent);
index 4d9247ae2a1362fadff06ca852721a56c7d8a3f8..230f9d390de0a501d4679093d43de27852d5381e 100644 (file)
@@ -567,5 +567,6 @@ _toplevel_cb_xdg_surface_destroy(struct wl_listener *listener, void *data)
    LOG("Destroy E_Desktop_Xdg_Toplevel_V6(%p)", toplevel);
 
    _toplevel_listener_finish(toplevel);
+   e_desktop_toplevel_destroy(toplevel->toplevel);
    free(toplevel);
 }