waylandsink: Workaround gnome-shell bug
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Fri, 24 May 2019 00:24:40 +0000 (20:24 -0400)
committerTim-Philipp Müller <tim@centricular.com>
Fri, 9 Aug 2019 08:46:18 +0000 (09:46 +0100)
Use a timeout to limit that amount of time we wait after the compositor
for the initial configure event. Compositor are support to emit a
configure event before any wl_buffer can be attached. The problem is
that Weston strongly enforce this, while gnome-shell simply does not
emit such an event.

ext/wayland/wlwindow.c

index 77b2d81..9ebbcaf 100644 (file)
@@ -259,6 +259,8 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
 
   /* Check which protocol we will use (in order of preference) */
   if (display->xdg_wm_base) {
+    gint64 timeout;
+
     /* First create the XDG surface */
     window->xdg_surface = xdg_wm_base_get_xdg_surface (display->xdg_wm_base,
         window->area_surface);
@@ -286,8 +288,14 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
     wl_display_flush (display->display);
 
     g_mutex_lock (&window->configure_mutex);
-    while (!window->configured)
-      g_cond_wait (&window->configure_cond, &window->configure_mutex);
+    timeout = g_get_monotonic_time () + 100 * G_TIME_SPAN_MILLISECOND;
+    while (!window->configured) {
+      if (!g_cond_wait_until (&window->configure_cond, &window->configure_mutex,
+              timeout)) {
+        GST_WARNING ("The compositor did not send configure event.");
+        break;
+      }
+    }
     g_mutex_unlock (&window->configure_mutex);
   } else if (display->wl_shell) {
     /* go toplevel */