* $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"
{
// 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 ) );
}
}
else
{
- m_pActiveLayout->refreshRect( rEvtRefresh.getXStart(),
- rEvtRefresh.getYStart(),
- rEvtRefresh.getWidth(),
- rEvtRefresh.getHeight() );
+ m_pActiveLayout->computeRefresh( rEvtRefresh.getXStart(),
+ rEvtRefresh.getYStart(),
+ rEvtRefresh.getWidth(),
+ rEvtRefresh.getHeight() );
}
}
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 );
}
}
// Only do the action when the key is down
- if( rEvtKey.getAsString().find( "key:down") != string::npos )
+ if( rEvtKey.getKeyState() == EvtKey::kDown )
{
//XXX not to be hardcoded!
// Ctrl-S = Change skin
return;
}
- vlc_value_t val;
- // Set the key
- val.i_int = rEvtKey.getKey();
- // Set the modifiers
- if( rEvtKey.getMod() & EvtInput::kModAlt )
- {
- val.i_int |= KEY_MODIFIER_ALT;
- }
- if( rEvtKey.getMod() & EvtInput::kModCtrl )
- {
- val.i_int |= KEY_MODIFIER_CTRL;
- }
- if( rEvtKey.getMod() & EvtInput::kModShift )
- {
- val.i_int |= KEY_MODIFIER_SHIFT;
- }
-
- var_Set( getIntf()->p_vlc, "key-pressed", val );
+ var_SetInteger( getIntf()->p_libvlc, "key-pressed",
+ rEvtKey.getModKey() );
}
- // Always store the modifier, which can be needed for scroll events
+ // Always store the modifier, which can be needed for scroll events.
m_currModifier = rEvtKey.getMod();
}
-
void TopWindow::processEvent( EvtScroll &rEvtScroll )
{
// Raise the windows
}
else
{
- // Treat the scroll event as a hotkey
- vlc_value_t val;
- if( rEvtScroll.getDirection() == EvtScroll::kUp )
- {
- val.i_int = KEY_MOUSEWHEELUP;
- }
- else
- {
- val.i_int = KEY_MOUSEWHEELDOWN;
- }
- // Add the modifiers
- val.i_int |= m_currModifier;
+ // Treat the scroll event as a hotkey plus current modifiers
+ int i = (rEvtScroll.getDirection() == EvtScroll::kUp ?
+ KEY_MOUSEWHEELUP : KEY_MOUSEWHEELDOWN) | m_currModifier;
- var_Set( getIntf()->p_vlc, "key-pressed", val );
+ var_SetInteger( getIntf()->p_libvlc, "key-pressed", i );
}
}
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 );
}
void TopWindow::innerShow()
{
- // First, refresh the layout and update the shape of the window
+ // First, refresh the layout
if( m_pActiveLayout )
{
- updateShape();
- m_pActiveLayout->refreshAll();
+ m_pActiveLayout->onShow();
}
+
// Show the window
GenericWindow::innerShow();
+
+ // place the top window on the screen (after show!)
+ move( getLeft(), getTop() );
}
-
+
+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" );
}
}