diff --git a/sddmauthhelper.cpp b/sddmauthhelper.cpp --- a/sddmauthhelper.cpp +++ b/sddmauthhelper.cpp @@ -49,7 +49,8 @@ ActionReply SddmAuthHelper::save(const QVariantMap &args) { ActionReply reply = ActionReply::HelperErrorReply(); - QSharedPointer sddmConfig = openConfig(args[QStringLiteral("sddm.conf")].toString()); + QSharedPointer sddmConfig = openConfig(args[QStringLiteral("kde_settings.conf")].toString()); + QSharedPointer sddmOldConfig = openConfig(args[QStringLiteral("sddm.conf")].toString()); QSharedPointer themeConfig; QString themeConfigFile = args[QStringLiteral("theme.conf.user")].toString(); @@ -60,7 +61,7 @@ QMap::const_iterator iterator; for (iterator = args.constBegin() ; iterator != args.constEnd() ; ++iterator) { - if (iterator.key() == QLatin1String("sddm.conf") || iterator.key() == QLatin1String("theme.conf.user")) + if (iterator.key() == QLatin1String("kde_settings.conf") || iterator.key() == QLatin1String("theme.conf.user")) continue; QStringList configFields = iterator.key().split(QLatin1Char('/')); @@ -73,8 +74,12 @@ QString groupName = configFields[1]; QString keyName = configFields[2]; - if (fileName == QLatin1String("sddm.conf")) { + // if there is an identical keyName in "sddm.conf" we want to delete it so SDDM doesn't read from the old file + // hierarchically SDDM prefers "etc/sddm.conf" to "/etc/sddm.conf.d/some_file.conf" + + if (fileName == QLatin1String("kde_settings.conf")) { sddmConfig->group(groupName).writeEntry(keyName, iterator.value()); + sddmOldConfig->group(groupName).deleteEntry(keyName); } else if (fileName == QLatin1String("theme.conf.user") && !themeConfig.isNull()) { QFileInfo themeConfigFileInfo(themeConfigFile); QDir configRootDirectory = themeConfigFileInfo.absoluteDir(); @@ -109,6 +114,7 @@ } } + sddmOldConfig->sync(); sddmConfig->sync(); if (!themeConfig.isNull()) diff --git a/src/advanceconfig.cpp b/src/advanceconfig.cpp --- a/src/advanceconfig.cpp +++ b/src/advanceconfig.cpp @@ -120,24 +120,24 @@ if (cursorIndex.isValid()) { const CursorTheme *cursorTheme = proxyCursorModel->theme(cursorIndex); if (cursorTheme) - args[QStringLiteral("sddm.conf/Theme/CursorTheme")] = cursorTheme->name(); + args[QStringLiteral("kde_settings.conf/Theme/CursorTheme")] = cursorTheme->name(); } - args[QStringLiteral("sddm.conf/Autologin/User")] = ( configUi->autoLogin->isChecked() ) ? configUi->userList->currentText() : QString(); - args[QStringLiteral("sddm.conf/Autologin/Session")] = ( configUi->autoLogin->isChecked() ) ? configUi->sessionList->currentData() : QString(); + args[QStringLiteral("kde_settings.conf/Autologin/User")] = ( configUi->autoLogin->isChecked() ) ? configUi->userList->currentText() : QString(); + args[QStringLiteral("kde_settings.conf/Autologin/Session")] = ( configUi->autoLogin->isChecked() ) ? configUi->sessionList->currentData() : QString(); - args[QStringLiteral("sddm.conf/Autologin/Relogin")] = configUi->reloginAfterQuit->isChecked(); + args[QStringLiteral("kde_settings.conf/Autologin/Relogin")] = configUi->reloginAfterQuit->isChecked(); //TODO session int minUid = configUi->minimumUid->text().toInt(); int maxUid = configUi->maximumUid->text().toInt(); if (isUidRangeValid(minUid, maxUid)) { - args[QStringLiteral("sddm.conf/Users/MinimumUid")] = configUi->minimumUid->text(); - args[QStringLiteral("sddm.conf/Users/MaximumUid")] = configUi->maximumUid->text(); + args[QStringLiteral("kde_settings.conf/Users/MinimumUid")] = configUi->minimumUid->text(); + args[QStringLiteral("kde_settings.conf/Users/MaximumUid")] = configUi->maximumUid->text(); } - args[QStringLiteral("sddm.conf/General/HaltCommand")] = configUi->haltCommand->url().toLocalFile(); - args[QStringLiteral("sddm.conf/General/RebootCommand")] = configUi->rebootCommand->url().toLocalFile(); + args[QStringLiteral("kde_settings.conf/General/HaltCommand")] = configUi->haltCommand->url().toLocalFile(); + args[QStringLiteral("kde_settings.conf/General/RebootCommand")] = configUi->rebootCommand->url().toLocalFile(); return args; } diff --git a/src/sddmkcm.h b/src/sddmkcm.h --- a/src/sddmkcm.h +++ b/src/sddmkcm.h @@ -38,6 +38,7 @@ private: KSharedConfigPtr mSddmConfig; + KSharedConfigPtr mSddmOldConfig; ThemeConfig *mThemeConfig; AdvanceConfig *mAdvanceConfig; }; diff --git a/src/sddmkcm.cpp b/src/sddmkcm.cpp --- a/src/sddmkcm.cpp +++ b/src/sddmkcm.cpp @@ -59,6 +59,8 @@ mSddmConfig = KSharedConfig::openConfig(QStringLiteral(SDDM_CONFIG_FILE), KConfig::CascadeConfig); + mSddmOldConfig = KSharedConfig::openConfig(QStringLiteral("sddm.conf"), KConfig::CascadeConfig); + // This does not listen for new config files in the directory. QStringList configFiles = QDir(QLatin1String(SDDM_CONFIG_DIR)).entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::LocaleAware), systemConfigFiles = QDir(QLatin1String(SDDM_SYSTEM_CONFIG_DIR)).entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::LocaleAware); @@ -70,6 +72,7 @@ [](const QString &filename) -> QString { return QStringLiteral(SDDM_CONFIG_DIR "/") + filename; }); mSddmConfig->addConfigSources(systemConfigFiles + configFiles); + mSddmOldConfig->addConfigSources(systemConfigFiles + configFiles); prepareUi(); } @@ -82,6 +85,7 @@ { QVariantMap args; + args[QStringLiteral("kde_settings.conf")] = QString {QLatin1String(SDDM_CONFIG_DIR "/") + QStringLiteral("kde_settings.conf")}; args[QStringLiteral("sddm.conf")] = QLatin1String(SDDM_CONFIG_FILE); if (!mThemeConfig->themeConfigPath().isEmpty()) { diff --git a/src/themeconfig.cpp b/src/themeconfig.cpp --- a/src/themeconfig.cpp +++ b/src/themeconfig.cpp @@ -80,7 +80,7 @@ QVariantMap args; - args[QStringLiteral("sddm.conf/Theme/Current")] = index.data(ThemesModel::IdRole); + args[QStringLiteral("kde_settings.conf/Theme/Current")] = index.data(ThemesModel::IdRole); if (!mThemeConfigPath.isEmpty()) { if (!mBackgroundPath.isEmpty()) {