diff --git a/src/miscellaneous/iofactory.cpp b/src/miscellaneous/iofactory.cpp index ea23a0ab4..501c0fab5 100755 --- a/src/miscellaneous/iofactory.cpp +++ b/src/miscellaneous/iofactory.cpp @@ -24,12 +24,25 @@ #include #include #include +#include #include IOFactory::IOFactory() { } +bool IOFactory::isFolderWritable(const QString &folder) { + QString real_file = folder; + + if (!real_file.endsWith(QDir::separator())) { + real_file += QDir::separator(); + } + + real_file += "test-permissions-file"; + + return QTemporaryFile(real_file).open(); +} + QString IOFactory::getSystemFolder(QStandardPaths::StandardLocation location) { return QStandardPaths::writableLocation(location); } diff --git a/src/miscellaneous/iofactory.h b/src/miscellaneous/iofactory.h index 59b5f1f79..77ec8bd87 100755 --- a/src/miscellaneous/iofactory.h +++ b/src/miscellaneous/iofactory.h @@ -31,7 +31,9 @@ class IOFactory { private: IOFactory(); - public: + public: + static bool isFolderWritable(const QString &folder); + // Returns system-wide folder according to type. static QString getSystemFolder(QStandardPaths::StandardLocation location); diff --git a/src/miscellaneous/settings.cpp b/src/miscellaneous/settings.cpp index 4574d1163..f8cea21b0 100755 --- a/src/miscellaneous/settings.cpp +++ b/src/miscellaneous/settings.cpp @@ -332,7 +332,7 @@ SettingsProperties Settings::determineProperties() { const QString home_path = qApp->homeFolderPath() + QDir::separator() + QString(APP_LOW_H_NAME); const QString home_path_file = home_path + properties.m_settingsSuffix; - const bool portable_settings_available = QFileInfo(app_path).isWritable(); + const bool portable_settings_available = IOFactory::isFolderWritable(app_path); const bool non_portable_settings_exist = QFile::exists(home_path_file); // We will use PORTABLE settings only and only if it is available and NON-PORTABLE