summaryrefslogtreecommitdiffhomepage
path: root/options/globals.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'options/globals.cpp')
-rw-r--r--options/globals.cpp45
1 files changed, 30 insertions, 15 deletions
diff --git a/options/globals.cpp b/options/globals.cpp
index 85a6bdf2..33327090 100644
--- a/options/globals.cpp
+++ b/options/globals.cpp
@@ -9,6 +9,8 @@
namespace options::globals::detail {
+ini_ctx::ini_ctx() = default;
+
bool is_portable_installation()
{
#if defined _WIN32
@@ -23,11 +25,11 @@ saver_::~saver_()
{
if (--ctx.refcount == 0 && ctx.modifiedp)
{
- ctx.modifiedp = false;
auto& settings = *ctx.qsettings;
settings.sync();
if (settings.status() != QSettings::NoError)
qDebug() << "error with .ini file" << settings.fileName() << settings.status();
+ ctx.modifiedp = false;
}
ctx.mtx.unlock();
}
@@ -41,7 +43,6 @@ ini_ctx& cur_settings()
{
static ini_ctx ini;
const QString pathname = ini_pathname();
- static QString ini_pathname;
ini.mtx.lock();
@@ -51,7 +52,7 @@ ini_ctx& cur_settings()
ini.pathname = pathname;
}
- if (pathname != ini_pathname)
+ if (ini.pathname != pathname)
{
ini.qsettings.emplace(pathname, QSettings::IniFormat);
ini.pathname = pathname;
@@ -66,15 +67,20 @@ ini_ctx& global_settings()
ini.mtx.lock();
- if (!is_portable_installation())
- // Windows registry or xdg on Linux
- ini.qsettings.emplace(OPENTRACK_ORG);
- else
+ if (ini.pathname.isEmpty())
{
- static const QString pathname = OPENTRACK_BASE_PATH + QStringLiteral("/globals.ini");
- // file in executable's directory
- ini.qsettings.emplace(pathname, QSettings::IniFormat);
- ini.pathname = pathname;
+ if (!is_portable_installation())
+ // Windows registry or xdg on Linux
+ ini.qsettings.emplace(OPENTRACK_ORG);
+ else
+ {
+ static const QString pathname = OPENTRACK_BASE_PATH + QStringLiteral("/globals.ini");
+ // file in executable's directory
+ ini.qsettings.emplace(pathname, QSettings::IniFormat);
+ ini.pathname = pathname;
+ }
+
+ ini.pathname = "placeholder";
}
return ini;
@@ -85,6 +91,16 @@ ini_ctx& global_settings()
namespace options::globals
{
+using namespace detail;
+
+bool is_ini_modified()
+{
+ ini_ctx& ini = cur_settings();
+ bool ret = ini.modifiedp;
+ ini.mtx.unlock();
+ return ret;
+}
+
QString ini_filename()
{
return with_global_settings_object([&](QSettings& settings) {
@@ -119,11 +135,10 @@ QStringList ini_list()
return list;
}
-void mark_ini_modified()
+void mark_ini_modified(bool value)
{
- using namespace detail;
auto& ini = cur_settings();
- ini.modifiedp = true;
+ ini.modifiedp = value;
ini.mtx.unlock();
}
@@ -138,7 +153,7 @@ QString ini_directory()
static const QString subdir = "ini";
if (!QDir(dir).mkpath(subdir))
- return QString();
+ return {};
return dir + '/' + subdir;
}