diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fad683c..1dce208 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,48 +1,48 @@ set(SDDM_CONFIG_FILE "${CMAKE_INSTALL_FULL_SYSCONFDIR}/sddm.conf" CACHE PATH "Path of the sddm config file") set(SDDM_CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/sddm.conf.d" CACHE PATH "Path of the sddm config directory") set(SDDM_SYSTEM_CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/sddm/sddm.conf.d" CACHE PATH "Path of the system sddm config directory") set(XSESSIONS_DIR "${CMAKE_INSTALL_PREFIX}/share/xsessions" CACHE PATH "Path of the xsessions") set(WAYLAND_SESSIONS_DIR "${CMAKE_INSTALL_PREFIX}/share/wayland-sessions" CACHE PATH "Path of the wayland sessions") configure_file(config.h.in config.h IMMEDIATE @ONLY) # add_subdirectory(configwidgets) include_directories(configwidgets) set(SDDM_KCM_SRCS sddmkcm.cpp themeconfig.cpp themesmodel.cpp thememetadata.cpp themesdelegate.cpp - advanceconfig.cpp + advancedconfig.cpp usersmodel.cpp sessionmodel.cpp configwidgets/selectimagebutton.cpp ) set(SDDM_KCM_UI ui/themeconfig.ui - ui/advanceconfig.ui) + ui/advancedconfig.ui) ki18n_wrap_ui(SDDM_KCM_SRCS ${SDDM_KCM_UI}) add_library(kcm_sddm MODULE ${SDDM_KCM_SRCS}) target_compile_definitions(kcm_sddm PRIVATE -DPROJECT_VERSION="${PROJECT_VERSION}") target_link_libraries(kcm_sddm Qt5::Widgets Qt5::X11Extras Qt5::Quick Qt5::QuickWidgets KF5::I18n KF5::ConfigWidgets KF5::AuthCore KF5::KIOWidgets KF5::NewStuff ) install(TARGETS kcm_sddm DESTINATION ${CMAKE_INSTALL_PLUGINDIR}) install(FILES qml/main.qml DESTINATION ${CMAKE_INSTALL_DATADIR}/sddm-kcm) diff --git a/src/advanceconfig.cpp b/src/advancedconfig.cpp similarity index 94% rename from src/advanceconfig.cpp rename to src/advancedconfig.cpp index b4ed2a5..82732a4 100644 --- a/src/advanceconfig.cpp +++ b/src/advancedconfig.cpp @@ -1,290 +1,290 @@ /* Copyright 2019 Filip Fila Copyright 2013 by Reza Fatahilah Shah This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "advanceconfig.h" -#include "ui_advanceconfig.h" +#include "advancedconfig.h" +#include "ui_advancedconfig.h" #include "config.h" #include "sessionmodel.h" #include "usersmodel.h" #include #include #include #include #include #include #include #include #include const int MIN_UID = 1000; const int MAX_UID = 60000; -AdvanceConfig::AdvanceConfig(const KSharedConfigPtr &config, QWidget *parent) : +AdvancedConfig::AdvancedConfig(const KSharedConfigPtr &config, QWidget *parent) : QWidget(parent), mConfig(config) { - configUi = new Ui::AdvanceConfig(); + configUi = new Ui::AdvancedConfig(); configUi->setupUi(this); configUi->syncExplanation->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont)); load(); connect(configUi->userList, SIGNAL(activated(int)), SIGNAL(changed())); connect(configUi->sessionList, SIGNAL(activated(int)), SIGNAL(changed())); connect(configUi->haltCommand, SIGNAL(textChanged(QString)), SIGNAL(changed())); connect(configUi->rebootCommand, SIGNAL(textChanged(QString)), SIGNAL(changed())); connect(configUi->minimumUid, SIGNAL(textChanged(QString)), SIGNAL(changed())); - connect(configUi->minimumUid, &QLineEdit::textChanged, this, &AdvanceConfig::slotUidRangeChanged); + connect(configUi->minimumUid, &QLineEdit::textChanged, this, &AdvancedConfig::slotUidRangeChanged); connect(configUi->maximumUid, SIGNAL(textChanged(QString)), SIGNAL(changed())); - connect(configUi->maximumUid, &QLineEdit::textChanged, this, &AdvanceConfig::slotUidRangeChanged); + connect(configUi->maximumUid, &QLineEdit::textChanged, this, &AdvancedConfig::slotUidRangeChanged); connect(configUi->autoLogin, &QCheckBox::toggled, this, [this] { emit changed(); }); connect(configUi->reloginAfterQuit, &QAbstractButton::toggled, this, [this] { emit changed(); }); - connect(configUi->syncSettings, &QPushButton::clicked, this, &AdvanceConfig::syncSettingsChanged); - connect(configUi->resetSettings, &QPushButton::clicked, this, &AdvanceConfig::resetSettingsChanged); + connect(configUi->syncSettings, &QPushButton::clicked, this, &AdvancedConfig::syncSettingsChanged); + connect(configUi->resetSettings, &QPushButton::clicked, this, &AdvancedConfig::resetSettingsChanged); } -AdvanceConfig::~AdvanceConfig() +AdvancedConfig::~AdvancedConfig() { delete configUi; } -void AdvanceConfig::load() +void AdvancedConfig::load() { //User list int minUid, maxUid; minUid = mConfig->group("Users").readEntry("MinimumUid", MIN_UID); maxUid = mConfig->group("Users").readEntry("MaximumUid", MAX_UID); userModel = new UsersModel(this); configUi->userList->setModel(userModel); userModel->populate( minUid, maxUid ); sessionModel = new SessionModel(this); configUi->sessionList->setModel(sessionModel); const QString currentUser = mConfig->group("Autologin").readEntry("User", ""); configUi->userList->setCurrentIndex(userModel->indexOf(currentUser)); const QString autologinSession = mConfig->group("Autologin").readEntry("Session", ""); configUi->sessionList->setCurrentIndex(sessionModel->indexOf(autologinSession)); configUi->autoLogin->setChecked(!currentUser.isEmpty()); configUi->reloginAfterQuit->setChecked(mConfig->group("Autologin").readEntry("Relogin", false)); QValidator *uidValidator = new QIntValidator(MIN_UID, MAX_UID, configUi->minimumUid); configUi->minimumUid->setValidator(uidValidator); configUi->minimumUid->setText(QString::number(minUid)); configUi->maximumUid->setValidator(uidValidator); configUi->maximumUid->setText(QString::number(maxUid)); //Commands configUi->haltCommand->setUrl(QUrl::fromLocalFile(mConfig->group("General").readEntry("HaltCommand"))); configUi->rebootCommand->setUrl(QUrl::fromLocalFile(mConfig->group("General").readEntry("RebootCommand"))); } -QVariantMap AdvanceConfig::save() +QVariantMap AdvancedConfig::save() { QVariantMap args; 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("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("kde_settings.conf/Users/MinimumUid")] = configUi->minimumUid->text(); args[QStringLiteral("kde_settings.conf/Users/MaximumUid")] = configUi->maximumUid->text(); } args[QStringLiteral("kde_settings.conf/General/HaltCommand")] = configUi->haltCommand->url().toLocalFile(); args[QStringLiteral("kde_settings.conf/General/RebootCommand")] = configUi->rebootCommand->url().toLocalFile(); return args; } -void AdvanceConfig::slotUidRangeChanged() +void AdvancedConfig::slotUidRangeChanged() { int minUid = configUi->minimumUid->text().toInt(); int maxUid = configUi->maximumUid->text().toInt(); if (!isUidRangeValid(minUid, maxUid)) { return; } userModel->populate(minUid, maxUid); } -bool AdvanceConfig::isUidRangeValid(int minUid, int maxUid) const +bool AdvancedConfig::isUidRangeValid(int minUid, int maxUid) const { if (minUid < 0 || minUid > maxUid) return false; return true; } -void AdvanceConfig::syncSettingsChanged() +void AdvancedConfig::syncSettingsChanged() { // read Plasma values KConfig cursorConfig(QStringLiteral("kcminputrc")); KConfigGroup cursorConfigGroup(&cursorConfig, "Mouse"); QVariant cursorTheme = cursorConfigGroup.readEntry("cursorTheme", QString()); KConfig dpiConfig(QStringLiteral("kcmfonts")); KConfigGroup dpiConfigGroup(&dpiConfig, "General"); QString dpiValue = dpiConfigGroup.readEntry("forceFontDPI"); QString dpiArgument = QStringLiteral("-dpi ") + dpiValue; KConfig numLockConfig(QStringLiteral("kcminputrc")); KConfigGroup numLockConfigGroup(&numLockConfig, "Keyboard"); QString numLock = numLockConfigGroup.readEntry("NumLock"); // define paths const QString fontconfigPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation, QStringLiteral("fontconfig"), QStandardPaths::LocateDirectory); const QString kdeglobalsPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation, QStringLiteral("kdeglobals")); const QString plasmarcPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation, QStringLiteral("plasmarc")); const QString sddmUserConfigPath = KUser("sddm").homeDir() + QStringLiteral("/.config"); // send values and paths to helper, debug if it fails 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 (!cursorTheme.isNull()) { args[QStringLiteral("kde_settings.conf/Theme/CursorTheme")] = cursorTheme; } else { qDebug() << "Cannot find cursor theme value."; } if (!dpiValue.isEmpty()) { args[QStringLiteral("kde_settings.conf/X11/ServerArguments")] = dpiArgument; } else { qDebug() << "Cannot find scaling DPI value."; } if (!numLock.isEmpty()) { if (numLock == QStringLiteral("0")) { args[QStringLiteral("kde_settings.conf/General/Numlock")] = QStringLiteral("on"); } else if (numLock == QStringLiteral("1")) { args[QStringLiteral("kde_settings.conf/General/Numlock")] = QStringLiteral("off"); } else if (numLock == QStringLiteral("2")) { args[QStringLiteral("kde_settings.conf/General/Numlock")] = QStringLiteral("none"); } } else { qDebug() << "Cannot find NumLock value."; } if (!fontconfigPath.isEmpty()) { args[QStringLiteral("fontconfig")] = fontconfigPath; } else { qDebug() << "Cannot find fontconfig folder."; } if (!kdeglobalsPath.isEmpty()) { args[QStringLiteral("kdeglobals")] = kdeglobalsPath; } else { qDebug() << "Cannot find kdeglobals file."; } if (!plasmarcPath.isEmpty()) { args[QStringLiteral("plasmarc")] = plasmarcPath; } else { qDebug() << "Cannot find plasmarc file."; } if (!sddmUserConfigPath.isEmpty()) { args[QStringLiteral("sddmUserConfig")] = sddmUserConfigPath; } else { qDebug() << "Cannot find SDDM user directory."; } KAuth::Action syncAction(QStringLiteral("org.kde.kcontrol.kcmsddm.sync")); syncAction.setHelperId(QStringLiteral("org.kde.kcontrol.kcmsddm")); syncAction.setArguments(args); auto job = syncAction.execute(); job->exec(); if (job->error()){ qDebug() << "Synchronization failed"; qDebug() << job->errorString(); qDebug() << job->errorText(); KMessageBox::error(this, job->errorText()); } else { changed(false); qDebug() << "Synchronization successful"; } } -void AdvanceConfig::resetSettingsChanged() +void AdvancedConfig::resetSettingsChanged() { // define paths const QString sddmUserConfigPath = KUser("sddm").homeDir() + QStringLiteral("/.config"); // send paths to helper QVariantMap args; args[QStringLiteral("sddmUserConfig")] = sddmUserConfigPath; args[QStringLiteral("kde_settings.conf")] = QString {QLatin1String(SDDM_CONFIG_DIR "/") + QStringLiteral("kde_settings.conf")}; args[QStringLiteral("sddm.conf")] = QLatin1String(SDDM_CONFIG_FILE); args[QStringLiteral("sddmUserConfig")] = sddmUserConfigPath; args[QStringLiteral("kde_settings.conf/Theme/CursorTheme")] = QVariant(); args[QStringLiteral("kde_settings.conf/X11/ServerArguments")] = QVariant(); args[QStringLiteral("kde_settings.conf/General/Numlock")] = QVariant(); KAuth::Action resetAction(QStringLiteral("org.kde.kcontrol.kcmsddm.reset")); resetAction.setHelperId(QStringLiteral("org.kde.kcontrol.kcmsddm")); resetAction.setArguments(args); auto job = resetAction.execute(); job->exec(); if (job->error()){ qDebug() << "Reset failed"; qDebug() << job->errorString(); qDebug() << job->errorText(); KMessageBox::error(this, job->errorText()); } else { changed(false); qDebug() << "Reset successful"; } } diff --git a/src/advanceconfig.h b/src/advancedconfig.h similarity index 87% rename from src/advanceconfig.h rename to src/advancedconfig.h index e86dcb7..d19d8df 100644 --- a/src/advanceconfig.h +++ b/src/advancedconfig.h @@ -1,63 +1,63 @@ /* Copyright 2019 Filip Fila Copyright 2013 by Reza Fatahilah Shah This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef ADVANCECONFIG_H #define ADVANCECONFIG_H #include #include namespace Ui { - class AdvanceConfig; + class AdvancedConfig; } class SortProxyModel; class UsersModel; class SessionModel; -class AdvanceConfig : public QWidget +class AdvancedConfig : public QWidget { Q_OBJECT public: - explicit AdvanceConfig(const KSharedConfigPtr &config, QWidget *parent = nullptr); - ~AdvanceConfig(); + explicit AdvancedConfig(const KSharedConfigPtr &config, QWidget *parent = nullptr); + ~AdvancedConfig(); QVariantMap save(); Q_SIGNALS: void changed(bool changed=true); public Q_SLOTS: void syncSettingsChanged(); void resetSettingsChanged(); private Q_SLOTS: void slotUidRangeChanged(); private: void load(); bool isUidRangeValid(int minUid, int maxUid) const; private: - Ui::AdvanceConfig *configUi; + Ui::AdvancedConfig *configUi; KSharedConfigPtr mConfig; UsersModel *userModel; SessionModel *sessionModel; }; #endif // ADVANCECONFIG_H diff --git a/src/sddmkcm.cpp b/src/sddmkcm.cpp index 0dc41ea..3adaff3 100644 --- a/src/sddmkcm.cpp +++ b/src/sddmkcm.cpp @@ -1,130 +1,130 @@ /* Copyright 2013 by Reza Fatahilah Shah This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "advanceconfig.h" +#include "advancedconfig.h" #include "config.h" #include "sddmkcm.h" #include "themeconfig.h" #include #include #include #include #include #include #include #include #include #include #include #include K_PLUGIN_FACTORY(SddmKcmFactory, registerPlugin();) SddmKcm::SddmKcm(QWidget *parent, const QVariantList &args) : KCModule(parent, args) { KAboutData* aboutData = new KAboutData(QStringLiteral("kcmsddm"), i18n("SDDM KDE Config"), QLatin1String(PROJECT_VERSION)); aboutData->setShortDescription(i18n("Login screen using the SDDM")); aboutData->setLicense(KAboutLicense::GPL_V2); aboutData->setHomepage(QStringLiteral("https://projects.kde.org/projects/kde/workspace/sddm-kcm")); aboutData->addAuthor(QStringLiteral("Reza Fatahilah Shah"), i18n("Author"), QStringLiteral("rshah0385@kireihana.com")); aboutData->addAuthor(QStringLiteral("David Edmundson"), i18n("Author"), QStringLiteral("davidedmundson@kde.org")); setAboutData(aboutData); setNeedsAuthorization(true); 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); // QStringBuilder keeps dangling references, so force return of QString (QTBUG-47066) std::transform(systemConfigFiles.begin(), systemConfigFiles.end(), systemConfigFiles.begin(), [](const QString &filename) -> QString { return QStringLiteral(SDDM_SYSTEM_CONFIG_DIR "/") + filename; }); std::transform(configFiles.begin(), configFiles.end(), configFiles.begin(), [](const QString &filename) -> QString { return QStringLiteral(SDDM_CONFIG_DIR "/") + filename; }); mSddmConfig->addConfigSources(systemConfigFiles + configFiles); mSddmOldConfig->addConfigSources(systemConfigFiles + configFiles); prepareUi(); } SddmKcm::~SddmKcm() { } void SddmKcm::save() { 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()) { args[QStringLiteral("theme.conf.user")] = QString(mThemeConfig->themeConfigPath() + QLatin1String(".user")); } qDebug() << "Ovr:" << args[QStringLiteral("theme.conf.user")].toString(); args.unite(mThemeConfig->save()); - args.unite(mAdvanceConfig->save()); + args.unite(mAdvancedConfig->save()); KAuth::Action saveAction = authAction(); saveAction.setHelperId(QStringLiteral("org.kde.kcontrol.kcmsddm")); saveAction.setArguments(args); auto job = saveAction.execute(); job->exec(); if (job->error()){ qDebug() << "Save Failed"; qDebug() << job->errorString(); qDebug() << job->errorText(); } else { changed(false); qDebug() << "Option saved"; } } void SddmKcm::prepareUi() { QHBoxLayout* layout = new QHBoxLayout(this); QTabWidget* tabHolder = new QTabWidget(this); layout->addWidget(tabHolder); mThemeConfig = new ThemeConfig(mSddmConfig, this); connect(mThemeConfig, SIGNAL(changed(bool)), SIGNAL(changed(bool))); tabHolder->addTab(mThemeConfig, i18n("Theme")); - mAdvanceConfig = new AdvanceConfig(mSddmConfig, this); - connect(mAdvanceConfig, SIGNAL(changed(bool)), SIGNAL(changed(bool))); + mAdvancedConfig = new AdvancedConfig(mSddmConfig, this); + connect(mAdvancedConfig, SIGNAL(changed(bool)), SIGNAL(changed(bool))); - tabHolder->addTab(mAdvanceConfig, i18n("Advanced")); + tabHolder->addTab(mAdvancedConfig, i18n("Advanced")); } #include "sddmkcm.moc" diff --git a/src/sddmkcm.h b/src/sddmkcm.h index 86f589a..cc76252 100644 --- a/src/sddmkcm.h +++ b/src/sddmkcm.h @@ -1,46 +1,46 @@ /* Copyright 2013 by Reza Fatahilah Shah This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef SDDMKCM_H #define SDDMKCM_H #include #include class ThemeConfig; -class AdvanceConfig; +class AdvancedConfig; class SddmKcm : public KCModule { Q_OBJECT public: explicit SddmKcm(QWidget *parent, const QVariantList &args); ~SddmKcm() Q_DECL_OVERRIDE; public Q_SLOTS: void save() Q_DECL_OVERRIDE; private: void prepareUi(); private: KSharedConfigPtr mSddmConfig; KSharedConfigPtr mSddmOldConfig; ThemeConfig *mThemeConfig; - AdvanceConfig *mAdvanceConfig; + AdvancedConfig *mAdvancedConfig; }; #endif // SDDMKCM_H diff --git a/src/ui/advanceconfig.ui b/src/ui/advancedconfig.ui similarity index 99% rename from src/ui/advanceconfig.ui rename to src/ui/advancedconfig.ui index 537d932..05f4673 100644 --- a/src/ui/advanceconfig.ui +++ b/src/ui/advancedconfig.ui @@ -1,328 +1,328 @@ - AdvanceConfig - + AdvancedConfig + 0 0 547 409 QFormLayout::FieldsStayAtSizeHint Qt::AlignHCenter|Qt::AlignTop Automatically log in: as user: false false with session: false false 0 0 Log in again immediately after logging off Qt::Vertical 8 8 Minimum user UID: 0 0 6 Maximum user UID: 0 0 6 Qt::Vertical 8 8 Halt command: 250 0 Reboot command: 250 0 Qt::Vertical 8 8 Settings synchronization: Sync Reset 0 0 320 90 Settings synchronization allows you to transfer the following Plasma settings to SDDM: color scheme, cursor theme, font, font rendering, NumLock preference, Plasma theme, and scaling DPI. false true KUrlRequester QWidget
kurlrequester.h
1
autoLogin toggled(bool) userList setEnabled(bool) 212 37 274 32 autoLogin toggled(bool) label_4 setEnabled(bool) 207 22 363 37 autoLogin toggled(bool) sessionList setEnabled(bool) 186 21 435 25 autoLogin toggled(bool) reloginAfterQuit setEnabled(bool) 222 22 214 59