[mutter/wip/carlosg/xwayland-on-demand: 27/32] wayland: Split Xwayland initialization in 2 steps



commit 01c03a0fafc416b3c5f200bf1a4ca0e4ee673e36
Author: Carlos Garnacho <carlosg gnome org>
Date:   Mon Dec 10 14:24:43 2018 +0100

    wayland: Split Xwayland initialization in 2 steps

 src/wayland/meta-wayland-private.h |  1 +
 src/wayland/meta-xwayland.c        | 22 +++++++++++++++-------
 2 files changed, 16 insertions(+), 7 deletions(-)
---
diff --git a/src/wayland/meta-wayland-private.h b/src/wayland/meta-wayland-private.h
index 31a7fc748..f2410be4c 100644
--- a/src/wayland/meta-wayland-private.h
+++ b/src/wayland/meta-wayland-private.h
@@ -48,6 +48,7 @@ typedef struct
   char *lock_file;
   int abstract_fd;
   int unix_fd;
+  struct wl_display *wayland_display;
   struct wl_client *client;
   struct wl_resource *xserver_resource;
   char *display_name;
diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
index 249c533f0..4432a05af 100644
--- a/src/wayland/meta-xwayland.c
+++ b/src/wayland/meta-xwayland.c
@@ -464,9 +464,8 @@ on_displayfd_ready (int          fd,
   return G_SOURCE_REMOVE;
 }
 
-gboolean
-meta_xwayland_start (MetaXWaylandManager *manager,
-                     struct wl_display   *wl_display)
+static gboolean
+meta_xwayland_init_xserver (MetaXWaylandManager *manager)
 {
   int xwayland_client_fd[2];
   int displayfd[2];
@@ -475,9 +474,6 @@ meta_xwayland_start (MetaXWaylandManager *manager,
   GSubprocessFlags flags;
   GError *error = NULL;
 
-  if (!choose_xdisplay (manager))
-    goto out;
-
   /* We want xwayland to be a wayland client so we make a socketpair to setup a
    * wayland protocol connection. */
   if (socketpair (AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, xwayland_client_fd) < 0)
@@ -536,7 +532,8 @@ meta_xwayland_start (MetaXWaylandManager *manager,
   g_subprocess_wait_async (manager->proc, manager->xserver_died_cancellable,
                            xserver_died, NULL);
   g_unix_fd_add (displayfd[0], G_IO_IN, on_displayfd_ready, manager);
-  manager->client = wl_client_create (wl_display, xwayland_client_fd[0]);
+  manager->client = wl_client_create (manager->wayland_display,
+                                      xwayland_client_fd[0]);
 
   /* We need to run a mainloop until we know xwayland has a binding
    * for our xserver interface at which point we can assume it's
@@ -555,6 +552,17 @@ out:
   return started;
 }
 
+gboolean
+meta_xwayland_start (MetaXWaylandManager *manager,
+                     struct wl_display   *wl_display)
+{
+  if (!choose_xdisplay (manager))
+    return FALSE;
+
+  manager->wayland_display = wl_display;
+  return meta_xwayland_init_xserver (manager);
+}
+
 static void
 on_x11_display_closing (MetaDisplay *display)
 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]