summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2009-02-26 13:40:18 +0000
committertweenk <tweenk@users.sourceforge.net>2009-02-26 13:40:18 +0000
commitf70a9f2048cf268a2fcb10d71935e449fd8e44f3 (patch)
tree231d2839f6c23670e4af992632c91f6c0335b2b5 /src
parentRemove the svn:executable property from README.ca.txt (diff)
downloadinkscape-f70a9f2048cf268a2fcb10d71935e449fd8e44f3.tar.gz
inkscape-f70a9f2048cf268a2fcb10d71935e449fd8e44f3.zip
Tentative fix for LP bug #168922: don't save prefs n crash handler
(bzr r7376)
Diffstat (limited to 'src')
-rw-r--r--src/inkscape.cpp10
-rw-r--r--src/preferences.cpp15
-rw-r--r--src/preferences.h17
3 files changed, 21 insertions, 21 deletions
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<SPDocument *, int>();
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: