[vlc-commits] commit: skins2: fix fullscreen issue (black screen when video terminates). (Erwan Tulou )
git at videolan.org
git at videolan.org
Sun Jul 18 23:18:54 CEST 2010
vlc | branch: master | Erwan Tulou <erwan10 at videolan.org> | Sun Jul 18 20:27:13 2010 +0200| [2e298fb87562b7a6470c24091a336b251be64bc4] | committer: Erwan Tulou
skins2: fix fullscreen issue (black screen when video terminates).
fullscreen is now managed (activation and deactivation) in skins2
exactly as it is done in qt4.
- activation when a VOUT_WINDOW_SETFULLSCREEN is received
- deactivation when (and only when) a vout_window release is received.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2e298fb87562b7a6470c24091a336b251be64bc4
---
modules/gui/skins2/src/vlcproc.cpp | 5 -----
modules/gui/skins2/src/vout_manager.cpp | 31 +++++++++++++++++++++++--------
modules/gui/skins2/src/vout_manager.hpp | 5 ++++-
3 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/modules/gui/skins2/src/vlcproc.cpp b/modules/gui/skins2/src/vlcproc.cpp
index bdbeb49..78f58c7 100644
--- a/modules/gui/skins2/src/vlcproc.cpp
+++ b/modules/gui/skins2/src/vlcproc.cpp
@@ -486,11 +486,7 @@ void VlcProc::on_intf_event_changed( vlc_object_t* p_obj, vlc_value_t newVal )
vout_thread_t* pVout = input_GetVout( pInput );
SET_BOOL( m_cVarHasVout, pVout != NULL );
if( pVout )
- {
- SET_BOOL( m_cVarFullscreen,
- var_GetBool( pVout, "fullscreen" ) );
vlc_object_release( pVout );
- }
break;
}
@@ -700,7 +696,6 @@ void VlcProc::reset_input()
SET_BOOL( m_cVarRecordable, false );
SET_BOOL( m_cVarRecording, false );
SET_BOOL( m_cVarDvdActive, false );
- SET_BOOL( m_cVarFullscreen, false );
SET_BOOL( m_cVarHasAudio, false );
SET_BOOL( m_cVarHasVout, false );
SET_BOOL( m_cVarStopped, true );
diff --git a/modules/gui/skins2/src/vout_manager.cpp b/modules/gui/skins2/src/vout_manager.cpp
index 86bd5e1..fd38c84 100644
--- a/modules/gui/skins2/src/vout_manager.cpp
+++ b/modules/gui/skins2/src/vout_manager.cpp
@@ -69,11 +69,17 @@ VoutManager::VoutManager( intf_thread_t *pIntf ): SkinObject( pIntf ),
m_pVoutMainWindow->move( 0, 0 );
m_pVoutMainWindow->resize( width, height );
+
+ VarBool &rFullscreen = VlcProc::instance( getIntf() )->getFullscreenVar();
+ rFullscreen.addObserver( this );
}
VoutManager::~VoutManager( )
{
+ VarBool &rFullscreen = VlcProc::instance( getIntf() )->getFullscreenVar();
+ rFullscreen.delObserver( this );
+
delete m_pVoutMainWindow;
}
@@ -249,6 +255,9 @@ void VoutManager::releaseWnd( vout_window_t *pWnd )
break;
}
}
+
+ // force fullscreen to false so that user regains control
+ VlcProc::instance( getIntf() )->setFullscreenVar( false );
}
@@ -277,23 +286,29 @@ void VoutManager::setSizeWnd( vout_window_t *pWnd, int width, int height )
}
}
+
void VoutManager::setFullscreenWnd( vout_window_t *pWnd, bool b_fullscreen )
{
- msg_Dbg( pWnd, "setFullscreen (%d) received from vout thread",
- b_fullscreen ? 1 : 0 );
+ msg_Dbg( pWnd, "setFullscreen (%i) received from vout thread",
+ b_fullscreen );
VlcProc::instance( getIntf() )->setFullscreenVar( b_fullscreen );
+}
- if( b_fullscreen )
- {
- m_pVoutMainWindow->show();
- }
- else
+
+void VoutManager::onUpdate( Subject<VarBool> &rVariable, void *arg )
+{
+ VarBool &rFullscreen = VlcProc::instance( getIntf() )->getFullscreenVar();
+ if( &rVariable == &rFullscreen )
{
- m_pVoutMainWindow->hide();
+ if( rFullscreen.get() )
+ m_pVoutMainWindow->show();
+ else
+ m_pVoutMainWindow->hide();
}
}
+
// Functions called by window provider
// ///////////////////////////////////
diff --git a/modules/gui/skins2/src/vout_manager.hpp b/modules/gui/skins2/src/vout_manager.hpp
index 095f25c..643af52 100644
--- a/modules/gui/skins2/src/vout_manager.hpp
+++ b/modules/gui/skins2/src/vout_manager.hpp
@@ -91,7 +91,7 @@ public:
/// Singleton object handling VLC internal state and playlist
-class VoutManager: public SkinObject
+class VoutManager: public SkinObject, public Observer<VarBool>
{
public:
/// Get the instance of VoutManager
@@ -146,6 +146,9 @@ public:
// test if vout are running
bool hasVout() { return ( m_SavedWndVec.size() != 0 ) ; }
+ /// called when fullscreen variable changed
+ virtual void onUpdate( Subject<VarBool> &rVariable , void* );
+
protected:
// Protected because it is a singleton
VoutManager( intf_thread_t *pIntf );
More information about the vlc-commits
mailing list