glwindow: Fix glimagesink cannot show frame when connect to qmlglsrc
authorHaihua Hu <jared.hu@nxp.com>
Wed, 27 Jul 2016 02:55:01 +0000 (10:55 +0800)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:32:21 +0000 (19:32 +0000)
When connect to qmlglsrc, x11 event loop will be replace by qt event loop
which will cause the window cannot receive event from xserver, such as resize

https://bugzilla.gnome.org/show_bug.cgi?id=768160

gst-libs/gst/gl/x11/gstglwindow_x11.c

index a330825..d08b757 100644 (file)
@@ -391,6 +391,7 @@ draw_cb (gpointer data)
   GstGLWindow *window = GST_GL_WINDOW (window_x11);
 
   if (gst_gl_window_is_running (window)) {
+    guint width, height;
     XWindowAttributes attr;
 
     XGetWindowAttributes (window_x11->device, window_x11->internal_win_id,
@@ -414,13 +415,16 @@ draw_cb (gpointer data)
       }
     }
 
-    if (window_x11->allow_extra_expose_events) {
-      if (window->queue_resize) {
-        guint width, height;
+    gst_gl_window_get_surface_dimensions (window, &width, &height);
+    if (attr.width != width || attr.height != height) {
+      width = attr.width;
+      height = attr.height;
+      gst_gl_window_queue_resize (window);
+    }
 
-        gst_gl_window_get_surface_dimensions (window, &width, &height);
+    if (window_x11->allow_extra_expose_events) {
+      if (window->queue_resize)
         gst_gl_window_resize (window, width, height);
-      }
 
       if (window->draw) {
         GstGLContext *context = gst_gl_window_get_context (window);