[vlc-commits] Qt: check embedded video window type at run-time

Rémi Denis-Courmont git at videolan.org
Thu Jul 5 17:35:18 CEST 2012


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Jul  4 21:14:53 2012 +0300| [65ebc7683aa0ab3bd4af950298d1eef0addaf54b] | committer: Rémi Denis-Courmont

Qt: check embedded video window type at run-time

With Qt5, the window type must be checked at run-time: the windowing
system is always defined as Q_WS_QPA.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=65ebc7683aa0ab3bd4af950298d1eef0addaf54b
---

 modules/gui/qt4/qt4.cpp |   72 +++++++++++++++++++++++++++++++++--------------
 modules/gui/qt4/qt4.hpp |    2 +-
 2 files changed, 52 insertions(+), 22 deletions(-)

diff --git a/modules/gui/qt4/qt4.cpp b/modules/gui/qt4/qt4.cpp
index edf06b5..d3a5880 100644
--- a/modules/gui/qt4/qt4.cpp
+++ b/modules/gui/qt4/qt4.cpp
@@ -295,15 +295,20 @@ vlc_module_begin ()
 
         set_callbacks( OpenDialogs, Close )
 
-#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_MAC)  || defined(Q_WS_PM)
+#if defined (Q_WS_X11) || (defined (Q_WS_QPA) && defined (__unix__))
     add_submodule ()
-#if defined(Q_WS_X11)
         set_capability( "vout window xid", 0 )
-#elif defined(Q_WS_WIN) || defined(Q_WS_PM)
+        set_callbacks( WindowOpen, WindowClose )
+#endif
+#if defined (Q_WS_WIN) || (defined (Q_WS_QPA) && defined (WIN32)) \
+ || defined (Q_WS_PM)  || (defined (Q_WS_QPA) && defined (__OS2__))
+    add_submodule ()
         set_capability( "vout window hwnd", 0 )
-#elif defined(Q_WS_MAC)
-        set_capability( "vout window nsobject", 0 )
+        set_callbacks( WindowOpen, WindowClose )
 #endif
+#if defined (Q_WS_MAC) || (defined (Q_WS_QPA) && defined (__APPLE__))
+    add_submodule ()
+        set_capability( "vout window nsobject", 0 )
         set_callbacks( WindowOpen, WindowClose )
 #endif
 
@@ -507,6 +512,22 @@ static void *Thread( void *obj )
     /* Explain how to show a dialog :D */
     p_intf->pf_show_dialog = ShowDialog;
 
+    /* Check window type from the Qt platform back-end */
+    p_intf->p_sys->voutWindowType = VOUT_WINDOW_TYPE_INVALID;
+#if defined (Q_WS_QPA)
+    QString platform = app.platformName();
+    if( platform == qfu("xcb") )
+        p_intf->p_sys->voutWindowType = VOUT_WINDOW_TYPE_XID;
+    else
+        msg_Err( p_intf, "unknown Qt platform: %s", qtu(platform) );
+#elif defined (Q_WS_X11)
+    p_intf->p_sys->voutWindowType = VOUT_WINDOW_TYPE_XID;
+#elif defined (Q_WS_WIN) || defined (Q_WS_PM)
+    p_intf->p_sys->voutWindowType = VOUT_WINDOW_TYPE_HWND;
+#elif defined (Q_WS_MAC)
+    p_intf->p_sys->voutWindowType = VOUT_WINDOW_TYPE_NSOBJECT;
+#endif
+
     /* Tell the main LibVLC thread we are ready */
     vlc_sem_post (&ready);
 
@@ -595,13 +616,8 @@ static int WindowControl( vout_window_t *, int i_query, va_list );
 
 static int WindowOpen( vout_window_t *p_wnd, const vout_window_cfg_t *cfg )
 {
-    /* */
     if( cfg->is_standalone )
         return VLC_EGENERIC;
-#if defined (Q_WS_X11)
-    if( var_InheritBool( p_wnd, "video-wallpaper" ) )
-        return VLC_EGENERIC;
-#endif
 
     intf_thread_t *p_intf =
         (intf_thread_t *)var_InheritAddress( p_wnd, "qt4-iface" );
@@ -610,13 +626,22 @@ static int WindowOpen( vout_window_t *p_wnd, const vout_window_cfg_t *cfg )
         msg_Dbg( p_wnd, "Qt interface not found" );
         return VLC_EGENERIC;
     }
+    if( p_intf->p_sys->voutWindowType != cfg->type )
+        return VLC_EGENERIC;
+    switch( cfg->type )
+    {
+        case VOUT_WINDOW_TYPE_XID:
+            if( var_InheritBool( p_wnd, "video-wallpaper" ) )
+                return VLC_EGENERIC;
+            break;
+    }
 
     QMutexLocker locker (&lock);
     if (unlikely(!active))
         return VLC_EGENERIC;
 
     MainInterface *p_mi = p_intf->p_sys->p_mi;
-    msg_Dbg( p_wnd, "requesting video..." );
+    msg_Dbg( p_wnd, "requesting video window..." );
 
     int i_x = cfg->x;
     int i_y = cfg->y;
@@ -626,16 +651,21 @@ static int WindowOpen( vout_window_t *p_wnd, const vout_window_cfg_t *cfg )
     WId wid = p_mi->getVideo( &i_x, &i_y, &i_width, &i_height );
     if( !wid )
         return VLC_EGENERIC;
-#if defined (Q_WS_X11)
-    p_wnd->handle.xid = wid;
-    p_wnd->display.x11 = NULL;
-#elif defined (Q_WS_WIN) || defined (Q_WS_PM)
-    p_wnd->handle.hwnd = (void *)wid;
-#elif defined (Q_WS_MAC)
-    p_wnd->handle.nsobject = (void *)wid;
-#else
-# error FIXME
-#endif
+
+    switch( cfg->type )
+    {
+        case VOUT_WINDOW_TYPE_XID:
+            p_wnd->handle.xid = wid;
+            p_wnd->display.x11 = NULL;
+            break;
+        case VOUT_WINDOW_TYPE_HWND:
+            p_wnd->handle.hwnd = (void *)wid;
+            break;
+        case VOUT_WINDOW_TYPE_NSOBJECT:
+            p_wnd->handle.nsobject = (void *)wid;
+            break;
+    }
+
     p_wnd->control = WindowControl;
     p_wnd->sys = (vout_window_sys_t*)p_mi;
     return VLC_SUCCESS;
diff --git a/modules/gui/qt4/qt4.hpp b/modules/gui/qt4/qt4.hpp
index 6064cc0..65d7a1a 100644
--- a/modules/gui/qt4/qt4.hpp
+++ b/modules/gui/qt4/qt4.hpp
@@ -76,7 +76,7 @@ struct intf_sys_t
     QString filepath;        /* Last path used in dialogs */
 
     int  i_screenHeight;     /* Detection of Small screens */
-
+    unsigned voutWindowType; /* Type of vout_window_t provided */
     bool b_isDialogProvider; /* Qt mode or Skins mode */
 #ifdef WIN32
     bool disable_volume_keys;



More information about the vlc-commits mailing list