waylandsink: Fix xdg_shell fullscreen mode
authorShinya Saito <ssaito@igel.co.jp>
Thu, 22 Aug 2019 07:04:37 +0000 (16:04 +0900)
committerNicolas Dufresne <nicolas@ndufresne.ca>
Fri, 10 Jan 2020 18:22:57 +0000 (18:22 +0000)
xdg_shell fullscreen mode doesn't work for committing
xdg_surface without configure acknowledgement.

In addition, we can't set different surface setting from
acknowledged config in this mode.

ext/wayland/wlwindow.c

index f22ebca..5015879 100644 (file)
@@ -259,7 +259,6 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
     gboolean fullscreen, GMutex * render_lock)
 {
   GstWlWindow *window;
-  gint width;
 
   window = gst_wl_window_new_internal (display, render_lock);
 
@@ -325,10 +324,14 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
     goto error;
   }
 
-  /* set the initial size to be the same as the reported video size */
-  width =
-      gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d);
-  gst_wl_window_set_render_rectangle (window, 0, 0, width, info->height);
+  /* render_rectangle is already set via toplevel_configure in
+   * xdg_shell fullscreen mode */
+  if (!(display->xdg_wm_base && fullscreen)) {
+    /* set the initial size to be the same as the reported video size */
+    gint width =
+        gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d);
+    gst_wl_window_set_render_rectangle (window, 0, 0, width, info->height);
+  }
 
   return window;
 
@@ -548,6 +551,9 @@ gst_wl_window_set_render_rectangle (GstWlWindow * window, gint x, gint y,
 
   gst_wl_window_update_borders (window);
 
+  if (!window->configured)
+    return;
+
   if (window->video_width != 0) {
     wl_subsurface_set_sync (window->video_subsurface);
     gst_wl_window_resize_video_surface (window, TRUE);