From: tweenk Date: Thu, 26 Feb 2009 13:40:18 +0000 (+0000) Subject: Tentative fix for LP bug #168922: don't save prefs n crash handler X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=d9f3774e53223e7355d0051cca9513a612fe7a79;p=inkscape.git Tentative fix for LP bug #168922: don't save prefs n crash handler --- diff --git a/src/inkscape.cpp b/src/inkscape.cpp index ae5258904..b497367cc 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -460,11 +460,8 @@ inkscape_init (SPObject * object) new (&inkscape->document_set) std::map(); inkscape->menus = sp_repr_read_mem (_(menus_skeleton), MENUS_SKELETON_SIZE, NULL); - inkscape->desktops = NULL; - inkscape->dialogs_toggle = TRUE; - inkscape->mapalt=GDK_MOD1_MASK; } @@ -658,7 +655,8 @@ inkscape_crash_handler (int /*signum*/) } } - Inkscape::Preferences::unload(); + // do not save the preferences since they can be in a corrupted state + Inkscape::Preferences::unload(false); fprintf (stderr, "Emergency save completed. Inkscape will close now.\n"); fprintf (stderr, "If you can reproduce this crash, please file a bug at www.inkscape.org\n"); @@ -749,7 +747,7 @@ inkscape_application_init (const gchar *argv0, gboolean use_gui) inkscape->use_gui = use_gui; inkscape->argv0 = g_strdup(argv0); - /* Load the preferences and menus; Later menu layout should be merged into prefs */ + /* Load the preferences and menus */ Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->load(use_gui, false); inkscape_load_menus(inkscape); @@ -1414,8 +1412,6 @@ inkscape_get_all_desktops(std::list< SPDesktop* >& listbuf) } } - - /* Local Variables: mode:c++ diff --git a/src/preferences.cpp b/src/preferences.cpp index ea3c015ef..16b775b34 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -73,10 +73,7 @@ Preferences::Preferences() : } Preferences::~Preferences() -{ - // when the preferences are unloaded, save them - save(); - +{ // delete all PrefNodeObservers for (_ObsMap::iterator i = _observer_map.begin(); i != _observer_map.end(); ) { delete (*i++).second; // avoids reference to a deleted key @@ -637,6 +634,16 @@ Preferences::Entry const Preferences::_create_pref_value(Glib::ustring const &pa return Entry(path, ptr); } +void Preferences::unload(bool save) +{ + if(_instance) + { + if (save) _instance->save(); + delete _instance; + _instance = NULL; + } +} + Preferences *Preferences::_instance = NULL; diff --git a/src/preferences.h b/src/preferences.h index a87a27718..7335ab39a 100644 --- a/src/preferences.h +++ b/src/preferences.h @@ -399,17 +399,14 @@ public: return _instance; } /** - * @brief Unload all preferences and store them on the hard disk. + * @brief Unload all preferences + * @param save Whether to save the preferences; defaults to true * - * This deletes the singleton object. Calling get() after this function is - */ - static void unload() { - if(_instance) - { - delete _instance; - _instance = NULL; - } - } + * This deletes the singleton object. Calling get() after this function + * will reinstate it, so you shouldn't. Pass false as the parameter + * to suppress automatic saving. + */ + static void unload(bool save=true); /*@}*/ protected: