summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Matos <tiagomatos@gmail.com>2015-08-03 16:09:33 +0200
committerRui Matos <tiagomatos@gmail.com>2015-08-05 13:50:09 +0200
commitab9dabe7251deeafdd2bff13a22f123df528c5cb (patch)
tree67919aa23dd8362b0c39894dfd912dbd95526b58
parent7ce06928e24843c7f625616a526fa7bfc1e0bddb (diff)
downloadmutter-ab9dabe7251deeafdd2bff13a22f123df528c5cb.tar.gz
wayland-surface: Don't crash if clients commit to a done popup
If we can't put up a popup because grabbing the pointer fails we immediately dismiss the popup but the client might have made requests already, in particular it might have commited the surface and in that case we should ignore it. https://bugzilla.gnome.org/show_bug.cgi?id=753237
-rw-r--r--src/wayland/meta-wayland-surface.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index e4a4e5a97..ef9edf61a 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -256,6 +256,12 @@ toplevel_surface_commit (MetaWaylandSurface *surface,
return;
}
}
+ else if (surface->role == META_WAYLAND_SURFACE_ROLE_XDG_POPUP)
+ {
+ /* Ignore commits if we couldn't grab the pointer */
+ if (!window)
+ return;
+ }
else
{
if (surface->buffer == NULL)
@@ -268,6 +274,8 @@ toplevel_surface_commit (MetaWaylandSurface *surface,
}
}
+ g_assert (window != NULL);
+
/* We resize X based surfaces according to X events */
if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
{