From 0f0489b455561727930d342fde8ba940dd85af63 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 27 Jul 2021 10:25:56 +0200 Subject: [PATCH] wlserver: wait for Xwayland to be ready in wlserver_init We''l be able to move some init bits out of wlserver with this. --- src/wlserver.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/wlserver.cpp b/src/wlserver.cpp index 6fa07b2..b3fcd9c 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp @@ -63,6 +63,8 @@ enum wlserver_touch_click_mode g_nTouchClickMode = WLSERVER_TOUCH_CLICK_LEFT; static struct wl_list pending_surfaces = {0}; +static bool bXwaylandReady = false; + static void wlserver_surface_set_wlr( struct wlserver_surface *surf, struct wlr_surface *wlr_surf ); void sig_handler(int signal) @@ -110,6 +112,8 @@ const struct wlr_surface_role xwayland_surface_role = { static void xwayland_ready(struct wl_listener *listener, void *data) { + bXwaylandReady = true; + setenv("DISPLAY", wlserver.wlr.xwayland_server->display_name, true); g_XWLDpy = XOpenDisplay( wlserver.wlr.xwayland_server->display_name ); @@ -589,6 +593,14 @@ int wlserver_init(int argc, char **argv, bool bIsNested) { return 1; } + while (!bXwaylandReady) { + wl_display_flush_clients(wlserver.wl_display); + if (wl_event_loop_dispatch(wlserver.wl_event_loop, -1) < 0) { + fprintf(stderr, "wlserver: wl_event_loop_dispatch failed"); + return 1; + } + } + wlr_output_enable( wlserver.wlr.output, true ); wlr_output_set_custom_mode( wlserver.wlr.output, g_nNestedWidth, g_nNestedHeight, g_nOutputRefresh * 1000 ); wlr_output_commit( wlserver.wlr.output );