]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/fg_init.cxx
Reset: Clear the pager queues, preserve properties.
[flightgear.git] / src / Main / fg_init.cxx
index 248b62acd503bcfe25fe1dc310c8aad11289a0b9..070d4daf38b68bc57e3f909dfdaaf0be5fc3d9b2 100644 (file)
@@ -417,9 +417,10 @@ bool fgInitHome()
         if( ::unlink(pidPath.c_str()) != 0 ) // delete file when app quits
           result = false;
     }
-    
-    fgSetBool("/sim/fghome-readonly", false);
 #endif
+
+    fgSetBool("/sim/fghome-readonly", false);
+
     if (!result) {
         flightgear::fatalMessageBox("File permissions problem",
                                     "Can't write to user-data storage folder, check file permissions and FG_HOME.",
@@ -938,7 +939,12 @@ void fgReInitSubsystems()
 
 void fgStartNewReset()
 {
-    globals->saveInitialState();
+    SGPropertyNode_ptr preserved(new SGPropertyNode);
+    
+    // copy properties which are USERARCHIVEd or PRESERVEd
+    int checked = SGPropertyNode::USERARCHIVE+SGPropertyNode::PRESERVE;
+    if (!copyProperties(globals->get_props(), preserved, checked, checked))
+        SG_LOG(SG_GENERAL, SG_ALERT, "Error saving preserved state");
     
     fgSetBool("/sim/signals/reinit", true);
     fgSetBool("/sim/freeze/master", true);
@@ -981,6 +987,7 @@ void fgStartNewReset()
     // don't cancel the pager until after shutdown, since AIModels (and
     // potentially others) can queue delete requests on the pager.
     render->getViewer()->getDatabasePager()->cancel();
+    render->getViewer()->getDatabasePager()->clear();
     
     osgDB::Registry::instance()->clearObjectCache();
     
@@ -996,12 +1003,18 @@ void fgStartNewReset()
     simgear::SGModelLib::resetPropertyRoot();
         
     globals->resetPropertyRoot();
-    globals->restoreInitialState();
     
     fgInitConfig(0, NULL, true);
     fgInitGeneral(); // all of this?
     
-    fgGetNode("/sim")->removeChild("aircraft-dir");    
+    if ( copyProperties(preserved, globals->get_props(), checked, checked)) {
+        SG_LOG( SG_GENERAL, SG_INFO, "Preserved state restored successfully" );
+    } else {
+        SG_LOG( SG_GENERAL, SG_INFO,
+               "Some errors restoring preserved state (read-only props?)" );
+    }
+
+    fgGetNode("/sim")->removeChild("aircraft-dir");
     fgInitAircraft(true);
     flightgear::Options::sharedInstance()->processOptions();