diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c index 6acb49599..a1cdc67cb 100644 --- a/hw/xwayland/xwayland-screen.c +++ b/hw/xwayland/xwayland-screen.c @@ -40,6 +40,7 @@ #include "dix/dix_priv.h" #include "dix/input_priv.h" #include "dix/property_priv.h" +#include "dix/screen_hooks_priv.h" #include "os/client_priv.h" #include "os/osdep.h" #include "os/xserver_poll.h" @@ -1136,8 +1137,7 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) xwl_screen->UnrealizeWindow = pScreen->UnrealizeWindow; pScreen->UnrealizeWindow = xwl_unrealize_window; - xwl_screen->DestroyWindow = pScreen->DestroyWindow; - pScreen->DestroyWindow = xwl_destroy_window; + dixScreenHookWindowDestroy(pScreen, xwl_window_destroy); xwl_screen->CloseScreen = pScreen->CloseScreen; pScreen->CloseScreen = xwl_close_screen; diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h index 7db6d3c87..5674c93c8 100644 --- a/hw/xwayland/xwayland-screen.h +++ b/hw/xwayland/xwayland-screen.h @@ -73,7 +73,6 @@ struct xwl_screen { ConfigNotifyProcPtr ConfigNotify; RealizeWindowProcPtr RealizeWindow; UnrealizeWindowProcPtr UnrealizeWindow; - DestroyWindowProcPtr DestroyWindow; XYToWindowProcPtr XYToWindow; SetWindowPixmapProcPtr SetWindowPixmap; ChangeWindowAttributesProcPtr ChangeWindowAttributes; diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c index a77f4fb88..c382430a9 100644 --- a/hw/xwayland/xwayland-window.c +++ b/hw/xwayland/xwayland-window.c @@ -1939,31 +1939,17 @@ xwl_window_create_frame_callback(struct xwl_window *xwl_window) xwl_present_for_each_frame_callback(xwl_window, xwl_present_reset_timer); } -Bool -xwl_destroy_window(WindowPtr window) +void +xwl_window_destroy(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr window) { - ScreenPtr screen = window->drawable.pScreen; - struct xwl_screen *xwl_screen = xwl_screen_get(screen); + struct xwl_screen *xwl_screen = xwl_screen_get(pScreen); struct xwl_window *xwl_window = xwl_window_get(window); - Bool ret; if (xwl_screen->present) xwl_present_cleanup(window); if (xwl_window) xwl_window_dispose(xwl_window); - - screen->DestroyWindow = xwl_screen->DestroyWindow; - - if (screen->DestroyWindow) - ret = screen->DestroyWindow (window); - else - ret = TRUE; - - xwl_screen->DestroyWindow = screen->DestroyWindow; - screen->DestroyWindow = xwl_destroy_window; - - return ret; } static Bool diff --git a/hw/xwayland/xwayland-window.h b/hw/xwayland/xwayland-window.h index ba5c3a078..16f230982 100644 --- a/hw/xwayland/xwayland-window.h +++ b/hw/xwayland/xwayland-window.h @@ -146,7 +146,7 @@ void xwl_move_window(WindowPtr window, int x, int y, WindowPtr next_sib, VTKind kind); -Bool xwl_destroy_window(WindowPtr window); +void xwl_window_destroy(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr window); void xwl_window_post_damage(struct xwl_window *xwl_window); void xwl_window_create_frame_callback(struct xwl_window *xwl_window); void xwl_window_surface_do_destroy(struct xwl_wl_surface *xwl_wl_surface);