[mutter/wip/carlosg/issue-361: 57/57] wayland: Check whether Xwayland window had a prior surface in generic code
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/issue-361: 57/57] wayland: Check whether Xwayland window had a prior surface in generic code
- Date: Mon, 25 Feb 2019 17:54:11 +0000 (UTC)
commit 8a9a78ec8a1565b83fa4344d01b34016bdb878c9
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Feb 6 23:04:13 2019 +0100
wayland: Check whether Xwayland window had a prior surface in generic code
Since commit 8df2a1452cf (As pointed out by Robert Mader) we just happened
do this check when doing the first lookup for a Wayland surface for a
XWayland window, when we are later notifying upon surface creation we just
set the relation with no further checks.
The cases pointed out in the comment (eg. window changing decoration) might
presumably happen in a quick enough sequence that we have two scheduled
associations on the fly, so move this check to the more generic
meta_xwayland_associate_window_with_surface() which is called on both
immediate and delayed paths.
https://gitlab.gnome.org/GNOME/mutter/issues/361
src/wayland/meta-xwayland.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
---
diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
index f0b95351d..f21b16de6 100644
--- a/src/wayland/meta-xwayland.c
+++ b/src/wayland/meta-xwayland.c
@@ -67,6 +67,16 @@ meta_xwayland_associate_window_with_surface (MetaWindow *window,
{
MetaDisplay *display = window->display;
+ /* If the window has an existing surface, like if we're
+ * undecorating or decorating the window, then we need
+ * to detach the window from its old surface.
+ */
+ if (window->surface)
+ {
+ meta_wayland_surface_set_window (window->surface, NULL);
+ window->surface = NULL;
+ }
+
if (!meta_wayland_surface_assign_role (surface,
META_TYPE_WAYLAND_SURFACE_ROLE_XWAYLAND,
NULL))
@@ -97,16 +107,6 @@ associate_window_with_surface_id (MetaXWaylandManager *manager,
{
struct wl_resource *resource;
- /* If the window has an existing surface, like if we're
- * undecorating or decorating the window, then we need
- * to detach the window from its old surface.
- */
- if (window->surface)
- {
- meta_wayland_surface_set_window (window->surface, NULL);
- window->surface = NULL;
- }
-
resource = wl_client_get_object (manager->client, surface_id);
if (resource)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]