[vlc-devel] [PATCH 1/2] qt: move vout window initialization code
RĂ©mi Denis-Courmont
remi at remlab.net
Fri Feb 3 18:13:15 CET 2017
Returning the WId is not adequate for a certain window type. Since the
interface widget already has platform-specific code, and already has
access to the vout window VLC object pointer, move the initialization
there. Then we do not have to worry about what to return.
---
modules/gui/qt/components/interface_widgets.cpp | 23 +++++++++++++++---
modules/gui/qt/components/interface_widgets.hpp | 6 ++---
modules/gui/qt/main_interface.cpp | 31 +++++++++++--------------
modules/gui/qt/main_interface.hpp | 9 +++----
modules/gui/qt/qt.cpp | 21 +----------------
5 files changed, 43 insertions(+), 47 deletions(-)
diff --git a/modules/gui/qt/components/interface_widgets.cpp b/modules/gui/qt/components/interface_widgets.cpp
index b6026aac1e..5226addb72 100644
--- a/modules/gui/qt/components/interface_widgets.cpp
+++ b/modules/gui/qt/components/interface_widgets.cpp
@@ -100,12 +100,12 @@ void VideoWidget::sync( void )
/**
* Request the video to avoid the conflicts
**/
-WId VideoWidget::request( struct vout_window_t *p_wnd )
+bool VideoWidget::request( struct vout_window_t *p_wnd )
{
if( stable )
{
msg_Dbg( p_intf, "embedded video already in use" );
- return 0;
+ return false;
}
assert( !p_window );
@@ -134,7 +134,24 @@ WId VideoWidget::request( struct vout_window_t *p_wnd )
sync();
p_window = p_wnd;
- return stable->winId();
+
+ p_wnd->type = p_intf->p_sys->voutWindowType;
+ switch( p_wnd->type )
+ {
+ case VOUT_WINDOW_TYPE_XID:
+ p_wnd->handle.xid = stable->winId();
+ p_wnd->display.x11 = NULL;
+ break;
+ case VOUT_WINDOW_TYPE_HWND:
+ p_wnd->handle.hwnd = (void *)stable->winId();
+ break;
+ case VOUT_WINDOW_TYPE_NSOBJECT:
+ p_wnd->handle.nsobject = (void *)stable->winId();
+ break;
+ default:
+ vlc_assert_unreachable();
+ }
+ return true;
}
/* Set the Widget to the correct Size */
diff --git a/modules/gui/qt/components/interface_widgets.hpp b/modules/gui/qt/components/interface_widgets.hpp
index b2cbf8059b..e41cdfb0ce 100644
--- a/modules/gui/qt/components/interface_widgets.hpp
+++ b/modules/gui/qt/components/interface_widgets.hpp
@@ -59,9 +59,9 @@ public:
VideoWidget( intf_thread_t *, QWidget* p_parent );
virtual ~VideoWidget();
- WId request( struct vout_window_t * );
- void release( void );
- void sync( void );
+ bool request( struct vout_window_t * );
+ void release( void );
+ void sync( void );
protected:
QPaintEngine *paintEngine() const Q_DECL_OVERRIDE
diff --git a/modules/gui/qt/main_interface.cpp b/modules/gui/qt/main_interface.cpp
index fa5da3bbd1..f44a872bc1 100644
--- a/modules/gui/qt/main_interface.cpp
+++ b/modules/gui/qt/main_interface.cpp
@@ -191,8 +191,8 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
/* VideoWidget connects for asynchronous calls */
b_videoFullScreen = false;
- connect( this, SIGNAL(askGetVideo(WId*, struct vout_window_t*, unsigned, unsigned, bool)),
- this, SLOT(getVideoSlot(WId*, struct vout_window_t*, unsigned, unsigned, bool)),
+ connect( this, SIGNAL(askGetVideo(struct vout_window_t*, unsigned, unsigned, bool, bool*)),
+ this, SLOT(getVideoSlot(struct vout_window_t*, unsigned, unsigned, bool, bool*)),
Qt::BlockingQueuedConnection );
connect( this, SIGNAL(askReleaseVideo( void )),
this, SLOT(releaseVideoSlot( void )),
@@ -703,32 +703,29 @@ void MainInterface::toggleFSC()
* All window provider queries must be handled through signals or events.
* That's why we have all those emit statements...
*/
-WId MainInterface::getVideo( struct vout_window_t *p_wnd,
- unsigned int i_width, unsigned int i_height,
- bool fullscreen )
+bool MainInterface::getVideo( struct vout_window_t *p_wnd,
+ unsigned int i_width, unsigned int i_height,
+ bool fullscreen )
{
- if( !videoWidget )
- return 0;
+ bool result;
- /* This is a blocking call signal. Results are returned through pointers.
- * Beware of deadlocks! */
- WId id;
- emit askGetVideo( &id, p_wnd, i_width, i_height, fullscreen );
- return id;
+ /* This is a blocking call signal. Results are stored directly in the
+ * vout_window_t and boolean pointers. Beware of deadlocks! */
+ emit askGetVideo( p_wnd, i_width, i_height, fullscreen, &result );
+ return result;
}
-void MainInterface::getVideoSlot( WId *p_id, struct vout_window_t *p_wnd,
+void MainInterface::getVideoSlot( struct vout_window_t *p_wnd,
unsigned i_width, unsigned i_height,
- bool fullscreen )
+ bool fullscreen, bool *res )
{
/* Hidden or minimized, activate */
if( isHidden() || isMinimized() )
toggleUpdateSystrayMenu();
/* Request the videoWidget */
- WId ret = videoWidget->request( p_wnd );
- *p_id = ret;
- if( ret ) /* The videoWidget is available */
+ *res = videoWidget->request( p_wnd );
+ if( *res ) /* The videoWidget is available */
{
setVideoFullScreen( fullscreen );
diff --git a/modules/gui/qt/main_interface.hpp b/modules/gui/qt/main_interface.hpp
index 03e78d37de..6e3d96aef3 100644
--- a/modules/gui/qt/main_interface.hpp
+++ b/modules/gui/qt/main_interface.hpp
@@ -69,7 +69,7 @@ public:
static const QEvent::Type ToolbarsNeedRebuild;
/* Video requests from core */
- WId getVideo( struct vout_window_t *,
+ bool getVideo( struct vout_window_t *,
unsigned int i_width, unsigned int i_height, bool );
void releaseVideo( void );
int controlVideo( int i_query, va_list args );
@@ -206,8 +206,8 @@ public slots:
void setPlaylistVisibility(bool b_visible);
/* Manage the Video Functions from the vout threads */
- void getVideoSlot( WId *p_id, struct vout_window_t *,
- unsigned pi_width, unsigned pi_height, bool );
+ void getVideoSlot( struct vout_window_t *,
+ unsigned i_width, unsigned i_height, bool, bool * );
void releaseVideoSlot( void );
void emitBoss();
@@ -261,7 +261,8 @@ protected slots:
void onInputChanged( bool );
signals:
- void askGetVideo( WId *, struct vout_window_t *, unsigned, unsigned, bool );
+ void askGetVideo( struct vout_window_t *, unsigned, unsigned, bool,
+ bool * );
void askReleaseVideo( );
void askVideoToResize( unsigned int, unsigned int );
void askVideoSetFullScreen( bool );
diff --git a/modules/gui/qt/qt.cpp b/modules/gui/qt/qt.cpp
index 43439f188d..b86b7e507f 100644
--- a/modules/gui/qt/qt.cpp
+++ b/modules/gui/qt/qt.cpp
@@ -749,28 +749,9 @@ static int WindowOpen( vout_window_t *p_wnd, const vout_window_cfg_t *cfg )
MainInterface *p_mi = p_intf->p_sys->p_mi;
msg_Dbg( p_wnd, "requesting video window..." );
- WId wid = p_mi->getVideo( p_wnd, cfg->width, cfg->height, cfg->is_fullscreen );
- if( !wid )
+ if( !p_mi->getVideo( p_wnd, cfg->width, cfg->height, cfg->is_fullscreen ) )
return VLC_EGENERIC;
- p_wnd->type = p_intf->p_sys->voutWindowType;
-
- switch( p_wnd->type )
- {
- case VOUT_WINDOW_TYPE_XID:
- p_wnd->handle.xid = (uintptr_t)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;
- default:
- vlc_assert_unreachable();
- }
-
p_wnd->control = WindowControl;
p_wnd->sys = (vout_window_sys_t*)p_mi;
return VLC_SUCCESS;
--
2.11.0
More information about the vlc-devel
mailing list