]> git.sesse.net Git - vlc/commitdiff
* generic_window.cpp: register window visibility variables in
authorCyril Deguet <asmax@videolan.org>
Sat, 25 Mar 2006 16:36:51 +0000 (16:36 +0000)
committerCyril Deguet <asmax@videolan.org>
Sat, 25 Mar 2006 16:36:51 +0000 (16:36 +0000)
 the var manager, to avoid a crash at exit when an expression
 'not window.isVisible' is used in a skin.

modules/gui/skins2/src/generic_window.cpp
modules/gui/skins2/src/generic_window.hpp

index f4cb9e5349c91e96fcf83a8cfbff7fd936b9ae80..1dc4a6751f9b5afa5629126cb911c3e93930f501 100644 (file)
@@ -25,6 +25,7 @@
 #include "generic_window.hpp"
 #include "os_window.hpp"
 #include "os_factory.hpp"
+#include "var_manager.hpp"
 #include "../events/evt_refresh.hpp"
 
 
@@ -32,7 +33,7 @@ GenericWindow::GenericWindow( intf_thread_t *pIntf, int left, int top,
                               bool dragDrop, bool playOnDrop,
                               GenericWindow *pParent ):
     SkinObject( pIntf ), m_left( left ), m_top( top ), m_width( 0 ),
-    m_height( 0 ), m_varVisible( pIntf )
+    m_height( 0 ), m_pVarVisible( NULL )
 {
     // Get the OSFactory
     OSFactory *pOsFactory = OSFactory::instance( getIntf() );
@@ -48,14 +49,18 @@ GenericWindow::GenericWindow( intf_thread_t *pIntf, int left, int top,
     m_pOsWindow = pOsFactory->createOSWindow( *this, dragDrop, playOnDrop,
                                               pOSParent );
 
+    // Create the visibility variable and register it in the manager
+    m_pVarVisible = new VarBoolImpl( pIntf );
+    VarManager::instance( pIntf )->registerVar( VariablePtr( m_pVarVisible ) );
+
     // Observe the visibility variable
-    m_varVisible.addObserver( this );
+    m_pVarVisible->addObserver( this );
 }
 
 
 GenericWindow::~GenericWindow()
 {
-    m_varVisible.delObserver( this );
+    m_pVarVisible->delObserver( this );
 
     if( m_pOsWindow )
     {
@@ -74,13 +79,13 @@ void GenericWindow::processEvent( EvtRefresh &rEvtRefresh )
 
 void GenericWindow::show() const
 {
-    m_varVisible.set( true );
+    m_pVarVisible->set( true );
 }
 
 
 void GenericWindow::hide() const
 {
-    m_varVisible.set( false );
+    m_pVarVisible->set( false );
 }
 
 
@@ -124,7 +129,7 @@ void GenericWindow::toggleOnTop( bool onTop ) const
 
 void GenericWindow::onUpdate( Subject<VarBool, void*> &rVariable, void*arg )
 {
-    if( m_varVisible.get() )
+    if( m_pVarVisible->get() )
     {
         innerShow();
     }
index 56cb23b6fee2c696c946849badde42374d565c76..3b11bea2d93cbe78909d0f504e956a6a5270e49c 100644 (file)
@@ -76,7 +76,7 @@ class GenericWindow: public SkinObject, public Observer<VarBool, void*>
         int getHeight() const { return m_height; }
 
         /// Give access to the visibility variable
-        VarBool &getVisibleVar() { return m_varVisible; }
+        VarBool &getVisibleVar() { return *m_pVarVisible; }
 
         /// Window type, mainly useful when overloaded (for VoutWindow)
         virtual string getType() const { return "Generic"; }
@@ -119,7 +119,7 @@ class GenericWindow: public SkinObject, public Observer<VarBool, void*>
         /// OS specific implementation
         OSWindow *m_pOsWindow;
         /// Variable for the visibility of the window
-        mutable VarBoolImpl m_varVisible;
+        mutable VarBoolImpl *m_pVarVisible;
 
         /// Method called when the observed variable is modified
         virtual void onUpdate( Subject<VarBool, void*> &rVariable , void*);