diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 05a9d8ae1c77113f1d695bffbb862c88ae4fa7ce..55b56d99c2c6b51d51aee8ef5108a2479c2b3cc7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,6 @@ -set(SDDM_CONFIG_FILE "/etc/sddm.conf" CACHE PATH "Path of the sddm config file") +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") configure_file(config.h.in config.h IMMEDIATE @ONLY) # add_subdirectory(configwidgets) diff --git a/src/advanceconfig.cpp b/src/advanceconfig.cpp index e7c16fd419773d2b3c8f640ae67a5882d0073a78..437094e92a7860af6bd06368e915becdb969e90e 100644 --- a/src/advanceconfig.cpp +++ b/src/advanceconfig.cpp @@ -33,11 +33,10 @@ const int MIN_UID = 1000; const int MAX_UID = 65000; -AdvanceConfig::AdvanceConfig(QWidget *parent) : - QWidget(parent) +AdvanceConfig::AdvanceConfig(const KSharedConfigPtr &config, QWidget *parent) : + QWidget(parent), + mConfig(config) { - mConfig = KSharedConfig::openConfig(SDDM_CONFIG_FILE, KConfig::SimpleConfig); - configUi = new Ui::AdvanceConfig(); configUi->setupUi(this); diff --git a/src/advanceconfig.h b/src/advanceconfig.h index e79271f5ea5204daff42e57f9ddc43cec3223967..813013681b2387779242703ab11104966b259154 100644 --- a/src/advanceconfig.h +++ b/src/advanceconfig.h @@ -34,7 +34,7 @@ class AdvanceConfig : public QWidget { Q_OBJECT public: - explicit AdvanceConfig(QWidget *parent = 0); + explicit AdvanceConfig(const KSharedConfigPtr &config, QWidget *parent = 0); ~AdvanceConfig(); QVariantMap save(); diff --git a/src/config.h.in b/src/config.h.in index 77a5e22d669d720bb163a6c9c6c54b1a5f0ec120..80309ceb7668c07c991f2c3ceb3460c3c688f38f 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -1,6 +1,8 @@ #ifndef CONFIG_H #define CONFIG_H -#define SDDM_CONFIG_FILE "@SDDM_CONFIG_FILE@" +#define SDDM_CONFIG_FILE "@SDDM_CONFIG_FILE@" +#define SDDM_CONFIG_DIR "@SDDM_CONFIG_DIR@" +#define SDDM_SYSTEM_CONFIG_DIR "@SDDM_SYSTEM_CONFIG_DIR@" -#endif //CONFIG_H \ No newline at end of file +#endif //CONFIG_H diff --git a/src/cursortheme/thememodel.cpp b/src/cursortheme/thememodel.cpp index 0dc04cff792bd84a5354a160dde7db7ba6a41748..65a558c6d8bf12cf936559e77c9e04e0c9fb3b7f 100644 --- a/src/cursortheme/thememodel.cpp +++ b/src/cursortheme/thememodel.cpp @@ -306,11 +306,6 @@ void CursorThemeModel::processThemeDir(const QDir &themeDir) if (!themeDir.exists("index.theme") && !haveCursors) return; - static bool isX11 = QX11Info::isPlatformX11(); - if (!isX11) { - // TODO: implement Wayland Cursor Theme support - return; - } // Create a cursor theme object for the theme dir XCursorTheme *theme = new XCursorTheme(themeDir); diff --git a/src/cursortheme/xcursortheme.cpp b/src/cursortheme/xcursortheme.cpp index 44be89e5f5c01038bfc1a70c71022f929e52b4f0..1e3517ed640ad9b57659464b0b10e25503a0564d 100644 --- a/src/cursortheme/xcursortheme.cpp +++ b/src/cursortheme/xcursortheme.cpp @@ -158,6 +158,9 @@ int XCursorTheme::autodetectCursorSize() const int size = 0; int dpi = 0; Display *dpy = QX11Info::display(); + // Fallback on wayland + if (!dpy) + return 24; // The string "v" is owned and will be destroyed by Xlib char *v = XGetDefault(dpy, "Xft", "dpi"); if (v) diff --git a/src/sddmkcm.cpp b/src/sddmkcm.cpp index 3dd8d0734a7d49f29745f96d4ff406baaf108821..6580e8c1820370f7b41180df02369a2ba5376393 100644 --- a/src/sddmkcm.cpp +++ b/src/sddmkcm.cpp @@ -16,6 +16,9 @@ */ #include "sddmkcm.h" +#include + +#include #include #include @@ -54,7 +57,19 @@ SddmKcm::SddmKcm(QWidget *parent, const QVariantList &args) : setAboutData(aboutData); setNeedsAuthorization(true); - + + mSddmConfig = KSharedConfig::openConfig(SDDM_CONFIG_FILE, KConfig::CascadeConfig); + + // This does not listen for new config files in the directory. + QStringList configFiles = QDir(SDDM_CONFIG_DIR).entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::LocaleAware), + systemConfigFiles = QDir(SDDM_SYSTEM_CONFIG_DIR).entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::LocaleAware); + std::transform(systemConfigFiles.begin(), systemConfigFiles.end(), systemConfigFiles.begin(), + [](const QString &filename) { return QStringLiteral(SDDM_SYSTEM_CONFIG_DIR "/") + filename; }); + std::transform(configFiles.begin(), configFiles.end(), configFiles.begin(), + [](const QString &filename) { return QStringLiteral(SDDM_CONFIG_DIR "/") + filename; }); + + mSddmConfig->addConfigSources(systemConfigFiles + configFiles); + prepareUi(); } @@ -101,12 +116,12 @@ void SddmKcm::prepareUi() QTabWidget* tabHolder = new QTabWidget(this); layout->addWidget(tabHolder); - mThemeConfig = new ThemeConfig(this); + mThemeConfig = new ThemeConfig(mSddmConfig, this); connect(mThemeConfig, SIGNAL(changed(bool)), SIGNAL(changed(bool))); tabHolder->addTab(mThemeConfig, i18n("Theme")); - mAdvanceConfig = new AdvanceConfig(this); + mAdvanceConfig = new AdvanceConfig(mSddmConfig, this); connect(mAdvanceConfig, SIGNAL(changed(bool)), SIGNAL(changed(bool))); tabHolder->addTab(mAdvanceConfig, i18n("Advanced")); diff --git a/src/sddmkcm.h b/src/sddmkcm.h index cef3c33b997cd8f0ebf57696fc044f2e3b0b9224..679d57aa48cacd58ec74763b0ecf6f901151ccd6 100644 --- a/src/sddmkcm.h +++ b/src/sddmkcm.h @@ -18,6 +18,7 @@ #define SDDMKCM_H #include +#include class ThemeConfig; class AdvanceConfig; @@ -36,6 +37,7 @@ private: void prepareUi(); private: + KSharedConfigPtr mSddmConfig; ThemeConfig *mThemeConfig; AdvanceConfig *mAdvanceConfig; }; diff --git a/src/themeconfig.cpp b/src/themeconfig.cpp index 97222164070c208772fea459d1da82927b787690..31801f80cf875d4c739ac0f5d5128e9bc052c633 100644 --- a/src/themeconfig.cpp +++ b/src/themeconfig.cpp @@ -37,11 +37,10 @@ #include "config.h" -ThemeConfig::ThemeConfig(QWidget *parent) : - QWidget(parent) +ThemeConfig::ThemeConfig(const KSharedConfigPtr &config, QWidget *parent) : + QWidget(parent), + mConfig(config) { - mConfig = KSharedConfig::openConfig(SDDM_CONFIG_FILE, KConfig::SimpleConfig); - configUi = new Ui::ThemeConfig(); configUi->setupUi(this); configUi->messageWidget->setVisible(false); diff --git a/src/themeconfig.h b/src/themeconfig.h index 22c2172d54438437e990837bf8df45101d09b850..bf47ec6e8ca3d8bd88f296ff09263059c3bc9d56 100644 --- a/src/themeconfig.h +++ b/src/themeconfig.h @@ -31,7 +31,7 @@ class ThemeConfig : public QWidget { Q_OBJECT public: - explicit ThemeConfig(QWidget *parent = 0); + explicit ThemeConfig(const KSharedConfigPtr &config, QWidget *parent = 0); ~ThemeConfig(); QVariantMap save();