From fbb0cdcbe2cbfbd15e5562bf97efdd5a2607050b Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 30 Jan 2017 19:07:11 -0300 Subject: [PATCH] Fix resetting default grid preferences (fix #1380) --- src/app/pref/preferences.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/app/pref/preferences.cpp b/src/app/pref/preferences.cpp index a105a2eed..bbe173943 100644 --- a/src/app/pref/preferences.cpp +++ b/src/app/pref/preferences.cpp @@ -159,27 +159,36 @@ std::string Preferences::docConfigFileName(const app::Document* doc) void Preferences::serializeDocPref(const app::Document* doc, app::DocumentPreferences* docPref, bool save) { - bool specific_file = false; + bool flush_config = false; if (doc) { - if (doc->isAssociatedToFile()) { - push_config_state(); - set_config_file(docConfigFileName(doc).c_str()); - specific_file = true; - } - else if (save) + // We do nothing if the document isn't associated to a file and we + // want to save its specific preferences. + if (save && !doc->isAssociatedToFile()) return; + + // We always push a new configuration file in the stack to avoid + // modifying the default preferences when a document in "doc" is + // specified. + push_config_state(); + if (doc->isAssociatedToFile()) { + set_config_file(docConfigFileName(doc).c_str()); + flush_config = true; + } } - if (save) + if (save) { docPref->save(); + } else { // Load default preferences, or preferences from .ini file. docPref->load(); } - if (specific_file) { - flush_config_file(); + if (doc) { + if (flush_config) + flush_config_file(); + pop_config_state(); } }