/*****************************************************************************
* top_window.cpp
*****************************************************************************
- * Copyright (C) 2003 VideoLAN (Centrale Réseaux) and its contributors
+ * Copyright (C) 2003 the VideoLAN team
* $Id$
*
* Authors: Cyril Deguet <asmax@via.ecp.fr>
- * Olivier Teulière <ipkiss@via.ecp.fr>
+ * Olivier Teulière <ipkiss@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "top_window.hpp"
#include "../events/evt_enter.hpp"
#include "../events/evt_focus.hpp"
#include "../events/evt_leave.hpp"
+#include "../events/evt_menu.hpp"
#include "../events/evt_motion.hpp"
#include "../events/evt_mouse.hpp"
#include "../events/evt_key.hpp"
TopWindow::TopWindow( intf_thread_t *pIntf, int left, int top,
WindowManager &rWindowManager,
- bool dragDrop, bool playOnDrop ):
- GenericWindow( pIntf, left, top, dragDrop, playOnDrop,
- NULL),
- m_rWindowManager( rWindowManager ), m_pActiveLayout( NULL ),
- m_pLastHitControl( NULL ), m_pCapturingControl( NULL ),
- m_pFocusControl( NULL ), m_currModifier( 0 )
+ bool dragDrop, bool playOnDrop, bool visible ):
+ GenericWindow( pIntf, left, top, dragDrop, playOnDrop, NULL ),
+ m_visible( visible ), m_rWindowManager( rWindowManager ),
+ m_pActiveLayout( NULL ), m_pLastHitControl( NULL ),
+ m_pCapturingControl( NULL ), m_pFocusControl( NULL ), m_currModifier( 0 )
{
// Register as a moving window
m_rWindowManager.registerWindow( *this );
+
+ // Create the "maximized" variable and register it in the manager
+ m_pVarMaximized = new VarBoolImpl( pIntf );
+ VarManager::instance( pIntf )->registerVar( VariablePtr( m_pVarMaximized ) );
}
void TopWindow::processEvent( EvtFocus &rEvtFocus )
{
-// fprintf(stderr, rEvtFocus.getAsString().c_str()) ;
+// fprintf(stderr, rEvtFocus.getAsString().c_str());
+}
+
+
+void TopWindow::processEvent( EvtMenu &rEvtMenu )
+{
+ Popup *pPopup = m_rWindowManager.getActivePopup();
+ // We should never receive a menu event when there is no active popup!
+ if( pPopup == NULL )
+ {
+ msg_Warn( getIntf(), "unexpected menu event, ignoring" );
+ return;
+ }
+
+ pPopup->handleEvent( rEvtMenu );
}
val.i_int |= KEY_MODIFIER_SHIFT;
}
- var_Set( getIntf()->p_vlc, "key-pressed", val );
+ var_Set( getIntf()->p_libvlc, "key-pressed", val );
}
// Always store the modifier, which can be needed for scroll events
// Add the modifiers
val.i_int |= m_currModifier;
- var_Set( getIntf()->p_vlc, "key-pressed", val );
+ var_Set( getIntf()->p_libvlc, "key-pressed", val );
}
}
void TopWindow::setActiveLayout( GenericLayout *pLayout )
{
+ bool isVisible = getVisibleVar().get();
+ if( m_pActiveLayout )
+ {
+ if( isVisible )
+ {
+ m_pActiveLayout->onHide();
+ }
+ // The current layout becomes inactive
+ m_pActiveLayout->getActiveVar().set( false );
+ }
+
pLayout->setWindow( this );
m_pActiveLayout = pLayout;
// Get the size of the layout and resize the window
resize( pLayout->getWidth(), pLayout->getHeight() );
+
updateShape();
- pLayout->refreshAll();
+ if( isVisible )
+ {
+ pLayout->onShow();
+ }
+
+ // The new layout is active
+ pLayout->getActiveVar().set( true );
}
if( m_pActiveLayout )
{
updateShape();
- m_pActiveLayout->refreshAll();
+ m_pActiveLayout->onShow();
}
// Show the window
GenericWindow::innerShow();
}
-
+
+void TopWindow::innerHide()
+{
+ if( m_pActiveLayout )
+ {
+ // Notify the active layout
+ m_pActiveLayout->onHide();
+ }
+ // Hide the window
+ GenericWindow::innerHide();
+}
+
+
void TopWindow::updateShape()
{
// Set the shape of the window
}
else
{
- msg_Dbg( getIntf(), "Control had not captured the mouse" );
+ msg_Dbg( getIntf(), "control had not captured the mouse" );
}
// Send an enter event to the control under the mouse, if it doesn't
// Check that the control is the active one
if( m_pLastHitControl && m_pLastHitControl == &rCtrl )
{
- // Set the tooltip text variable
- VarManager *pVarManager = VarManager::instance( getIntf() );
- pVarManager->getTooltipText().set( rCtrl.getTooltipText() );
+ if( rCtrl.getTooltipText().size() )
+ {
+ // Set the tooltip text variable
+ VarManager *pVarManager = VarManager::instance( getIntf() );
+ pVarManager->getTooltipText().set( rCtrl.getTooltipText() );
+ m_rWindowManager.showTooltip();
+ }
+ else
+ {
+ // Nothing to display, so hide the tooltip
+ m_rWindowManager.hideTooltip();
+ }
}
}
}
else
{
- msg_Dbg( getIntf(), "Control at NULL position" );
+ msg_Dbg( getIntf(), "control at NULL position" );
}
}