From bf477ba678f9e2e41411d83aeb08980ae4a3ddd2 Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Sun, 1 Dec 2013 01:32:21 +0100 Subject: [PATCH] Canvas GUI: completely reset on reinit --- src/Canvas/gui_mgr.cxx | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/Canvas/gui_mgr.cxx b/src/Canvas/gui_mgr.cxx index 9346e06de..453893886 100644 --- a/src/Canvas/gui_mgr.cxx +++ b/src/Canvas/gui_mgr.cxx @@ -198,6 +198,10 @@ DesktopGroup::DesktopGroup(): // Do not change values on reinit _width.node()->setAttribute(SGPropertyNode::PRESERVE, true); _height.node()->setAttribute(SGPropertyNode::PRESERVE, true); + + // Do not restore windows on reinit (all windows will need to be recreated, + // but hey it's a reset ;-)) + _node->setAttribute(SGPropertyNode::PRESERVE, true); } //------------------------------------------------------------------------------ @@ -480,14 +484,9 @@ void DesktopGroup::handleMouseMode(SGPropertyNode* node) } //------------------------------------------------------------------------------ -GUIMgr::GUIMgr(): - _desktop( new DesktopGroup ), - _event_handler( new GUIEventHandler( - boost::static_pointer_cast(_desktop) - )) +GUIMgr::GUIMgr() { - // We handle the property listener manually within ::init and ::shutdown. - _desktop->removeListener(); + } //------------------------------------------------------------------------------ @@ -506,39 +505,43 @@ canvas::WindowPtr GUIMgr::createWindow(const std::string& name) //------------------------------------------------------------------------------ void GUIMgr::init() { - boost::static_pointer_cast(_desktop)->handleResize + DesktopPtr desktop( new DesktopGroup ); + desktop->handleResize ( 0, 0, fgGetInt("/sim/startup/xsize"), fgGetInt("/sim/startup/ysize") ); + _desktop = desktop; + _event_handler = new GUIEventHandler(desktop); globals->get_renderer() ->getViewer() ->getEventHandlers() // GUI is on top of everything so lets install as first event handler .push_front( _event_handler ); - simgear::canvas::Canvas::addPlacementFactory ( "window", boost::bind(&GUIMgr::addWindowPlacement, this, _1, _2) ); - _desktop->getProps()->addChangeListener(_desktop.get()); + _desktop->getProps()->fireCreatedRecursive(); } //------------------------------------------------------------------------------ void GUIMgr::shutdown() { - _desktop->getProps()->removeChangeListener(_desktop.get()); + _desktop->destroy(); + _desktop.reset(); simgear::canvas::Canvas::removePlacementFactory("window"); globals->get_renderer() ->getViewer() ->removeEventHandler( _event_handler ); + _event_handler = 0; } //------------------------------------------------------------------------------ -- 2.39.5