Skip to content

Commit

Permalink
Merge pull request #23 from keepassxreboot/develop
Browse files Browse the repository at this point in the history
Fork Sync: Update from parent repository
  • Loading branch information
libf-de authored Oct 24, 2023
2 parents b19ab62 + 509e218 commit b396785
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 2 deletions.
2 changes: 1 addition & 1 deletion docs/topics/DownloadInstall.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ image::linux_store.png[]

The Snap and Flatpak options are sandboxed applications (more secure). The Native option is installed with the operating system files. Read more about the limitations of these options here: https://keepassxc.org/docs/#faq-appsnap-yubikey[KeePassXC Snap FAQ]

NOTE: KeePassXC stores a configuration file in `~/.cache` to remember window position, recent files, and other local settings. If you mount this folder to a tmpdisk you will lose settings after reboot.
NOTE: KeePassXC stores a configuration file in `~/.local/state` to remember window position, recent files, and other local settings. If you mount this folder to a tmpdisk you will lose settings after reboot.

=== macOS
To install the KeePassXC app on macOS, double click on the downloaded DMG file and use the click and drag option as shown:
Expand Down
33 changes: 32 additions & 1 deletion src/core/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,28 @@ void Config::init(const QString& configFileName, const QString& localConfigFileN
QDir().rmdir(QFileInfo(localConfigFileName).absolutePath());
}

#if defined(Q_OS_LINUX)
// Upgrade from previous KeePassXC version which stores its config
// in ~/.cache on Linux instead of ~/.local/state.
// Move file to correct location before continuing.
if (!QFile::exists(localConfigFileName)) {
QString oldLocalConfigPath =
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc";
QString suffix;
#ifdef QT_DEBUG
suffix = "_debug";
#endif
oldLocalConfigPath += QString("/keepassxc%1.ini").arg(suffix);
oldLocalConfigPath = QDir::toNativeSeparators(oldLocalConfigPath);
if (QFile::exists(oldLocalConfigPath)) {
QDir().mkpath(QFileInfo(localConfigFileName).absolutePath());
QFile::copy(oldLocalConfigPath, localConfigFileName);
QFile::remove(oldLocalConfigPath);
QDir().rmdir(QFileInfo(oldLocalConfigPath).absolutePath());
}
}
#endif

m_settings.reset(new QSettings(configFileName, QSettings::IniFormat));
if (!localConfigFileName.isEmpty() && configFileName != localConfigFileName) {
m_localSettings.reset(new QSettings(localConfigFileName, QSettings::IniFormat));
Expand Down Expand Up @@ -512,7 +534,16 @@ QPair<QString, QString> Config::defaultConfigFiles()
#else
// On case-sensitive Operating Systems, force use of lowercase app directories
configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/keepassxc";
localConfigPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc";
// Qt does not support XDG_STATE_HOME yet, change this once XDG_STATE_HOME is added
QString xdgStateHome = QFile::decodeName(qgetenv("XDG_STATE_HOME"));
if (!xdgStateHome.startsWith(u'/')) {
xdgStateHome.clear(); // spec says relative paths should be ignored
}
if (xdgStateHome.isEmpty()) {
xdgStateHome = QDir::homePath() + "/.local/state";
}

localConfigPath = xdgStateHome + "/keepassxc";
#endif

QString suffix;
Expand Down

0 comments on commit b396785

Please sign in to comment.