Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'xs/src/slic3r/GUI/AppConfig.cpp')
-rw-r--r--xs/src/slic3r/GUI/AppConfig.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/xs/src/slic3r/GUI/AppConfig.cpp b/xs/src/slic3r/GUI/AppConfig.cpp
index 2a33cd733..c2ae0bf0b 100644
--- a/xs/src/slic3r/GUI/AppConfig.cpp
+++ b/xs/src/slic3r/GUI/AppConfig.cpp
@@ -16,6 +16,8 @@
#include <boost/property_tree/ini_parser.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/algorithm/string/predicate.hpp>
+#include <boost/format.hpp>
+
namespace Slic3r {
@@ -60,6 +62,14 @@ void AppConfig::set_defaults()
if (get("remember_output_path").empty())
set("remember_output_path", "1");
+
+ // Remove legacy window positions/sizes
+ erase("", "main_frame_maximized");
+ erase("", "main_frame_pos");
+ erase("", "main_frame_size");
+ erase("", "object_settings_maximized");
+ erase("", "object_settings_pos");
+ erase("", "object_settings_size");
}
void AppConfig::load()
@@ -117,8 +127,14 @@ void AppConfig::load()
void AppConfig::save()
{
+ // The config is first written to a file with a PID suffix and then moved
+ // to avoid race conditions with multiple instances of Slic3r
+
+ const auto path = config_path();
+ std::string path_pid = (boost::format("%1%.%2%") % path % get_current_pid()).str();
+
boost::nowide::ofstream c;
- c.open(AppConfig::config_path(), std::ios::out | std::ios::trunc);
+ c.open(path_pid, std::ios::out | std::ios::trunc);
c << "# " << Slic3r::header_slic3r_generated() << std::endl;
// Make sure the "no" category is written first.
for (const std::pair<std::string, std::string> &kvp : m_storage[""])
@@ -147,6 +163,9 @@ void AppConfig::save()
}
}
c.close();
+
+ rename_file(path_pid, path);
+
m_dirty = false;
}