]> git.sesse.net Git - vlc/commitdiff
Qt4: wait until the video output is ready
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Fri, 20 Jun 2008 16:45:03 +0000 (19:45 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Fri, 20 Jun 2008 16:52:48 +0000 (19:52 +0300)
Except that this still returns an X11 invalid handle

modules/gui/qt4/components/interface_widgets.cpp

index 4ba788d366fe7e900856856f17c8af0ab278a98c..f31e75b8d826b3d9e876b9bdaf571c3a05929696 100644 (file)
@@ -68,8 +68,14 @@ VideoWidget::VideoWidget( intf_thread_t *_p_i ) : QFrame( NULL ), p_intf( _p_i )
     plt.setColor( QPalette::Inactive, QPalette::Window , Qt::black );
     setPalette( plt );
 
-    /* The core can ask through a callback to show the video */
-    CONNECT( this, askVideoWidgetToShow(), this, show() );
+    /* The core can ask through a callback to show the video.
+     * NOTE: We need to block the video output core until the window handle
+     * is ready for use (otherwise an X11 invalid handle failure may occur).
+     * As a side effect, it is illegal to emit askVideoWidgetToShow from
+     * the same thread as the Qt4 thread that owns this. */
+    QObject::connect( this, SIGNAL(askVideoWidgetToShow()), this, SLOT(show()),
+                      Qt::BlockingQueuedConnection );
+
     /* The core can ask through a callback to resize the video */
    // CONNECT( this, askResize( int, int ), this, SetSizing( int, int ) );
 }
@@ -108,6 +114,7 @@ void *VideoWidget::request( vout_thread_t *p_nvout, int *pi_x, int *pi_y,
         return NULL;
     }
     p_vout = p_nvout;
+    msg_Dbg( p_intf, "embedded video handle %p", winId() );
     return ( void* )winId();
 }