desktop_shell: Add destroy signal for toplevel 33/323433/2
authorSeunghun Lee <shiin.lee@samsung.com>
Fri, 25 Apr 2025 05:00:26 +0000 (14:00 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 28 Apr 2025 08:31:39 +0000 (08:31 +0000)
Change-Id: I79347f5a8aa6afd1205c233906a874545caceca1

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

index 341a5468c907e5ba4354291230975c9f90390d05..f18cb6dfa1b780b714b1258e9eea8e07ff73e68e 100644 (file)
@@ -261,6 +261,8 @@ _toplevel_init(E_Desktop_Toplevel *toplevel, struct wl_resource *shell_surface_r
 EINTERN void
 e_desktop_toplevel_init(E_Desktop_Toplevel *toplevel, E_Desktop_Surface_Interface *iface, E_Surface *e_surface, struct wl_resource *shell_surface_resource)
 {
+   wl_signal_init(&toplevel->events.destroy);
+
    _surface_init(&toplevel->surface, e_surface, iface);
    _toplevel_init(toplevel, shell_surface_resource);
 
@@ -287,6 +289,12 @@ e_desktop_toplevel_try_from_surface(E_Surface *e_surface)
    return _toplevel_from_surface(surface);
 }
 
+EINTERN void
+e_desktop_toplevel_destroy_listener_add(E_Desktop_Toplevel *toplevel, struct wl_listener *listener)
+{
+   wl_signal_add(&toplevel->events.destroy, listener);
+}
+
 EINTERN void
 e_desktop_toplevel_title_set(E_Desktop_Toplevel *toplevel, const char *title)
 {
index 16506f7c9f5b18f2ca5ff308e0f1683817e6cd60..f2b769b7578e820dba89b83aa98ac5752ef89574 100644 (file)
@@ -73,6 +73,11 @@ void e_desktop_surface_unmap(E_Desktop_Surface *surface);
  */
 E_Desktop_Toplevel *e_desktop_toplevel_try_from_surface(E_Surface *e_surface);
 
+/**
+ * Add a listener to be called when given E_Desktop_Toplevel is destroyed
+ */
+void e_desktop_toplevel_destroy_listener_add(E_Desktop_Toplevel *toplevel, struct wl_listener *listener);
+
 /**
  * Get E_Client instance from E_Desktop_Toplevel
  */
index 52880fb2c2496e2b37a3ed0524bd8492ec5eb6f3..808ab66f58161401a199914b664ae4076493561d 100644 (file)
@@ -25,6 +25,11 @@ struct _E_Desktop_Surface
 struct _E_Desktop_Toplevel
 {
    E_Desktop_Surface surface;
+
+   struct
+     {
+        struct wl_signal destroy;
+     } events;
 };
 
 struct wl_display *e_desktop_shell_display_get(E_Desktop_Shell *shell);
index dba3fd7a5e6fe3548cf25966b3707bc80d64d1ec..2c83a0ad40494d2e9f453bd2e4cc419fb977d6dd 100644 (file)
@@ -510,7 +510,7 @@ _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_finish(&toplevel->base);
+   _toplevel_listener_finish(toplevel);
    free(toplevel);
 }