diff --git a/src/wlserver.cpp b/src/wlserver.cpp index eeb351a..de9338a 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp @@ -366,6 +366,14 @@ static wlserver_wl_surface_info *get_wl_surface_info(struct wlr_surface *wlr_sur static void handle_wl_surface_destroy( struct wl_listener *l, void *data ) { wlserver_wl_surface_info *surf = wl_container_of( l, surf, destroy ); + if (surf->x11_surface) + surf->x11_surface->wlr = nullptr; + + if ( surf->wlr == wlserver.mouse_focus_surface ) + wlserver.mouse_focus_surface = nullptr; + + if ( surf->wlr == wlserver.kb_focus_surface ) + wlserver.kb_focus_surface = nullptr; delete surf; } @@ -1230,16 +1238,6 @@ void wlserver_x11_surface_info_finish( struct wlserver_x11_surface_info *surf ) wl_info->x11_surface = nullptr; } - if ( surf->wlr == wlserver.mouse_focus_surface ) - { - wlserver.mouse_focus_surface = nullptr; - } - - if ( surf->wlr == wlserver.kb_focus_surface ) - { - wlserver.kb_focus_surface = nullptr; - } - surf->wl_id = 0; surf->wlr = nullptr; wl_list_remove( &surf->pending_link );