[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:19:32 CEST 2010


vlc/vlc-1.1 | branch: master | Erwan Tulou <erwan10 at videolan.org> | Sun Jul 18 20:27:13 2010 +0200| [23db5d08ff6796fa2056248d691792ad1a7c66ae] | 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.
(cherry picked from commit 2e298fb87562b7a6470c24091a336b251be64bc4)

> http://git.videolan.org/gitweb.cgi/vlc/vlc-1.1.git/?a=commit;h=23db5d08ff6796fa2056248d691792ad1a7c66ae
---

 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 208a56f..6e13a04 100644
--- a/modules/gui/skins2/src/vlcproc.cpp
+++ b/modules/gui/skins2/src/vlcproc.cpp
@@ -498,11 +498,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;
         }
 
@@ -712,7 +708,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