wayland: fix pointer focus for destroyed surfaces
We had an assertion in meta_wayland_surface_free() that after a repick() we would not choose the freed surface, but that didn't consider surfaces destroyed while holding the implicit pointer grab (ie, because the user clicked on the X button). In that case, we need to bypass the grab infrastructure and explicitly unfocus the dead surface. https://bugzilla.gnome.org/show_bug.cgi?id=706982
This commit is contained in:
@@ -497,9 +497,14 @@ meta_wayland_surface_free (MetaWaylandSurface *surface)
|
||||
|
||||
meta_wayland_compositor_repick (compositor);
|
||||
|
||||
/* Check that repick didn't pick the freed surface */
|
||||
g_assert (surface != compositor->seat->pointer.focus);
|
||||
g_assert (surface != compositor->seat->keyboard.focus);
|
||||
if (surface == compositor->seat->pointer.focus)
|
||||
{
|
||||
meta_wayland_pointer_destroy_focus (&compositor->seat->pointer);
|
||||
|
||||
g_assert (surface != compositor->seat->pointer.focus);
|
||||
g_assert (surface != compositor->seat->pointer.grab->focus);
|
||||
}
|
||||
|
||||
if (compositor->implicit_grab_surface == surface)
|
||||
compositor->implicit_grab_surface = compositor->seat->pointer.current;
|
||||
|
Reference in New Issue
Block a user