* $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"
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 );
}
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
}
else
{
- msg_Dbg( getIntf(), "Control at NULL position" );
+ msg_Dbg( getIntf(), "control at NULL position" );
}
}