From 9e174e45447ffdd8e03cb7d5581ee8f0ae3c6bcf Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Tue, 24 May 2022 15:20:56 +0300 Subject: [PATCH] kgreeter: implement option to change the cursor theme Signed-off-by: Ivailo Monev --- kgreeter/kcm/kgreeterconfig.cpp | 34 +++++++++++++++++++++ kgreeter/kcm/kgreeterconfig.h | 1 + kgreeter/kcm/kgreeterconfig.ui | 42 ++++++++++++++++---------- kgreeter/kcm/kgreeterhelper.cpp | 9 ++++-- kgreeter/kgreeter.cpp | 6 ++++ kgreeter/lightdm-kgreeter-greeter.conf | 1 + 6 files changed, 75 insertions(+), 18 deletions(-) diff --git a/kgreeter/kcm/kgreeterconfig.cpp b/kgreeter/kcm/kgreeterconfig.cpp index b9c8d597..8fbb52c4 100644 --- a/kgreeter/kcm/kgreeterconfig.cpp +++ b/kgreeter/kcm/kgreeterconfig.cpp @@ -92,6 +92,20 @@ KCMGreeter::KCMGreeter(QWidget* parent, const QVariantList& args) } connect(colorsbox, SIGNAL(currentIndexChanged(QString)), this, SLOT(slotColorChanged(QString))); + cursorbox->addItem(i18n("Default"), QVariant(QString::fromLatin1("default"))); + const QStringList cursorthemes = KGlobal::dirs()->findAllResources("icon", "*/index.theme"); + foreach (const QString &cursortheme, cursorthemes) { + const QString cursorthemename = QSettings(cursortheme, QSettings::IniFormat).value("Icon Theme/Name").toString(); + QDir cursorthemedir(cursortheme); + cursorthemedir.cdUp(); + if (!cursorthemedir.exists(QString::fromLatin1("cursors"))) { + continue; + } + const QString cursorthemebasename = QFileInfo(cursorthemedir.dirName()).baseName(); + cursorbox->addItem(cursorthemename, QVariant(cursorthemebasename)); + } + connect(cursorbox, SIGNAL(currentIndexChanged(QString)), this, SLOT(slotCursorChanged(QString))); + backgroundrequester->setFilter(KImageIO::pattern(KImageIO::Reading)); connect(backgroundrequester, SIGNAL(textChanged(QString)), this, SLOT(slotURLChanged(QString))); connect(backgroundrequester, SIGNAL(urlSelected(KUrl)), this, SLOT(slotURLChanged(KUrl))); @@ -139,6 +153,17 @@ void KCMGreeter::load() } } + cursorbox->setCurrentIndex(0); // default + const QString kgreetercursortheme = kgreetersettings.value("greeter/cursortheme").toString(); + if (!kgreetercursortheme.isEmpty()) { + for (int i = 0; i < cursorbox->count(); i++) { + if (cursorbox->itemData(i).toString().toLower() == kgreetercursortheme.toLower()) { + cursorbox->setCurrentIndex(i); + break; + } + } + } + const QString kgreeterbackground = kgreetersettings.value("greeter/background", KGreeterDefaultBackground()).toString(); backgroundrequester->setUrl(KUrl(kgreeterbackground)); @@ -156,6 +181,7 @@ void KCMGreeter::save() kgreeteraction.addArgument("font", fontchooser->font().toString()); kgreeteraction.addArgument("style", stylesbox->itemData(stylesbox->currentIndex()).toString()); kgreeteraction.addArgument("colorscheme", colorsbox->itemData(colorsbox->currentIndex()).toString()); + kgreeteraction.addArgument("cursortheme", cursorbox->itemData(cursorbox->currentIndex()).toString()); kgreeteraction.addArgument("background", backgroundrequester->url().path()); kgreeteraction.addArgument("rectangle", rectanglerequester->url().path()); KAuth::ActionReply kgreeterreply = kgreeteraction.execute(); @@ -179,6 +205,7 @@ void KCMGreeter::defaults() } } colorsbox->setCurrentIndex(0); + cursorbox->setCurrentIndex(0); backgroundrequester->setUrl(KUrl()); rectanglerequester->setUrl(KUrl()); @@ -207,6 +234,13 @@ void KCMGreeter::slotColorChanged(const QString &color) emit changed(true); } +void KCMGreeter::slotCursorChanged(const QString &cursor) +{ + Q_UNUSED(cursor); + enableTest(false); + emit changed(true); +} + void KCMGreeter::slotURLChanged(const QString &url) { Q_UNUSED(url); diff --git a/kgreeter/kcm/kgreeterconfig.h b/kgreeter/kcm/kgreeterconfig.h index d2dd4658..44931583 100644 --- a/kgreeter/kcm/kgreeterconfig.h +++ b/kgreeter/kcm/kgreeterconfig.h @@ -47,6 +47,7 @@ private Q_SLOTS: void slotFontChanged(const QFont &font); void slotStyleChanged(const QString &style); void slotColorChanged(const QString &color); + void slotCursorChanged(const QString &cursor); void slotURLChanged(const QString &url); void slotURLChanged(const KUrl &url); diff --git a/kgreeter/kcm/kgreeterconfig.ui b/kgreeter/kcm/kgreeterconfig.ui index f62e52b2..4154bb48 100644 --- a/kgreeter/kcm/kgreeterconfig.ui +++ b/kgreeter/kcm/kgreeterconfig.ui @@ -59,16 +59,6 @@ - - - - Color scheme: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - @@ -79,10 +69,20 @@ + + + + Color scheme: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + - + Background: @@ -92,13 +92,16 @@ - - + + - + + + + Rectangle: @@ -108,8 +111,15 @@ - - + + + + + + + Cursor theme: + + diff --git a/kgreeter/kcm/kgreeterhelper.cpp b/kgreeter/kcm/kgreeterhelper.cpp index 1930310a..253d795d 100644 --- a/kgreeter/kcm/kgreeterhelper.cpp +++ b/kgreeter/kcm/kgreeterhelper.cpp @@ -26,8 +26,8 @@ ActionReply KGreeterHelper::save(const QVariantMap ¶meters) { if (!parameters.contains("font") || !parameters.contains("style") - || !parameters.contains("colorscheme") || !parameters.contains("background") - || !parameters.contains("rectangle")) { + || !parameters.contains("colorscheme") || !parameters.contains("cursortheme") + || !parameters.contains("background") || !parameters.contains("rectangle")) { return KAuth::ActionReply::HelperErrorReply; } @@ -35,11 +35,16 @@ ActionReply KGreeterHelper::save(const QVariantMap ¶meters) if (colorscheme == QLatin1String("default")) { colorscheme = QString(); } + QString cursortheme = parameters.value("cursortheme").toString(); + if (cursortheme == QLatin1String("default")) { + cursortheme = QString(); + } QSettings kgreetersettings(KDE_SYSCONFDIR "/lightdm/lightdm-kgreeter-greeter.conf", QSettings::IniFormat); kgreetersettings.setValue("greeter/font", parameters.value("font")); kgreetersettings.setValue("greeter/style", parameters.value("style")); kgreetersettings.setValue("greeter/colorscheme", colorscheme); + kgreetersettings.setValue("greeter/cursortheme", cursortheme); kgreetersettings.setValue("greeter/background", parameters.value("background")); kgreetersettings.setValue("greeter/rectangle", parameters.value("rectangle")); if (kgreetersettings.status() != QSettings::NoError) { diff --git a/kgreeter/kgreeter.cpp b/kgreeter/kgreeter.cpp index 17b4667c..6b78e08f 100644 --- a/kgreeter/kgreeter.cpp +++ b/kgreeter/kgreeter.cpp @@ -567,6 +567,12 @@ int main(int argc, char**argv) app.setPalette(KGlobalSettings::createApplicationPalette()); } + const QString kgreetercursortheme = kgreetersettings.value("greeter/cursortheme").toString(); + if (!kgreetercursortheme.isEmpty()) { + const QByteArray xcursorthemebytes = kgreetercursortheme.toAscii(); + ::setenv("XCURSOR_THEME", xcursorthemebytes.constData(), 1); + } + glibloop = g_main_loop_new(NULL, false); KGreeter kgreeter; diff --git a/kgreeter/lightdm-kgreeter-greeter.conf b/kgreeter/lightdm-kgreeter-greeter.conf index 64d8906f..0adbb9c1 100644 --- a/kgreeter/lightdm-kgreeter-greeter.conf +++ b/kgreeter/lightdm-kgreeter-greeter.conf @@ -5,5 +5,6 @@ #font= #style= #colorscheme= +#cursortheme= #background= #rectangle=