mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-05-31 22:58:26 +02:00
xwayland: Clear the "xwl-window" tag on unrealize
Now that we keep the Wayland surface around for longer than the xwl_window, we might get events for that surface after the X11 window is unrealized. Make sure we untag the Wayland surface when the Wayland surface is delayed, to break the wl_surface/xwl_window relationship, so that events for that surface are discarded by Xwayland. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Fixes:e37f18ee9- xwayland: Delay wl_surface destruction (cherry picked from commita1d14aa8c5)
This commit is contained in:
parent
f883f6bc6e
commit
71e8be4e36
1 changed files with 13 additions and 3 deletions
|
|
@ -121,6 +121,12 @@ xwl_window_set_xwayland_tag(struct xwl_window *xwl_window)
|
|||
wl_proxy_set_tag((struct wl_proxy *)xwl_window->surface, &xwl_surface_tag);
|
||||
}
|
||||
|
||||
static void
|
||||
xwl_window_clear_xwayland_tag(struct xwl_window *xwl_window)
|
||||
{
|
||||
wl_proxy_set_tag((struct wl_proxy *)xwl_window->surface, NULL);
|
||||
}
|
||||
|
||||
Bool
|
||||
is_surface_from_xwl_window(struct wl_surface *surface)
|
||||
{
|
||||
|
|
@ -618,9 +624,13 @@ release_wl_surface_for_window(struct xwl_window *xwl_window)
|
|||
return;
|
||||
}
|
||||
|
||||
/* Otherwise, schedule the destruction later, to mitigate the race
|
||||
* between X11 and Wayland processing so that the compositor has the
|
||||
* time to establish the association before the wl_surface is destroyed.
|
||||
/* Break the wl_surface / xwl_window relationship */
|
||||
wl_surface_set_user_data(xwl_window->surface, NULL);
|
||||
xwl_window_clear_xwayland_tag(xwl_window);
|
||||
|
||||
/* Schedule the destruction later, to mitigate the race between X11
|
||||
* and Wayland processing so that the compositor has the time to
|
||||
* establish the association before the wl_surface is destroyed.
|
||||
*/
|
||||
xwl_wl_surface = xnfcalloc(1, sizeof *xwl_wl_surface);
|
||||
xwl_wl_surface->wl_surface = xwl_window->surface;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue