]> git.mxchange.org Git - flightgear.git/commitdiff
GUIMgr: prevent double init/shutdown
authorThomas Geymayer <tomgey@gmail.com>
Mon, 16 Jun 2014 21:47:05 +0000 (23:47 +0200)
committerThomas Geymayer <tomgey@gmail.com>
Mon, 16 Jun 2014 21:47:05 +0000 (23:47 +0200)
src/Canvas/gui_mgr.cxx

index d63359487c035119900e3e354945d117936978ac..1750f5a5ba518ffdf90d4c3a561a60c9ce4299dc 100644 (file)
@@ -501,6 +501,12 @@ sc::WindowPtr GUIMgr::createWindow(const std::string& name)
 //------------------------------------------------------------------------------
 void GUIMgr::init()
 {
+  if( _desktop && _event_handler )
+  {
+    SG_LOG(SG_GUI, SG_WARN, "GUIMgr::init() already initialized.");
+    return;
+  }
+
   DesktopPtr desktop( new DesktopGroup );
   desktop->handleResize
   (
@@ -530,14 +536,27 @@ void GUIMgr::init()
 //------------------------------------------------------------------------------
 void GUIMgr::shutdown()
 {
-  _desktop->destroy();
-  _desktop.reset();
+  if( !_desktop && !_event_handler )
+  {
+    SG_LOG(SG_GUI, SG_WARN, "GUIMgr::shutdown() not running.");
+    return;
+  }
+
   sc::Canvas::removePlacementFactory("window");
 
-  globals->get_renderer()
-         ->getViewer()
-         ->removeEventHandler( _event_handler );
-  _event_handler = 0;
+  if( _desktop )
+  {
+    _desktop->destroy();
+    _desktop.reset();
+  }
+
+  if( _event_handler )
+  {
+    globals->get_renderer()
+           ->getViewer()
+           ->removeEventHandler( _event_handler );
+    _event_handler = 0;
+  }
 }
 
 //------------------------------------------------------------------------------