kgreeter: implement option to change the cursor theme

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-05-24 15:20:56 +03:00
parent abe93a9325
commit 9e174e4544
6 changed files with 75 additions and 18 deletions

View file

@ -92,6 +92,20 @@ KCMGreeter::KCMGreeter(QWidget* parent, const QVariantList& args)
} }
connect(colorsbox, SIGNAL(currentIndexChanged(QString)), this, SLOT(slotColorChanged(QString))); 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)); backgroundrequester->setFilter(KImageIO::pattern(KImageIO::Reading));
connect(backgroundrequester, SIGNAL(textChanged(QString)), this, SLOT(slotURLChanged(QString))); connect(backgroundrequester, SIGNAL(textChanged(QString)), this, SLOT(slotURLChanged(QString)));
connect(backgroundrequester, SIGNAL(urlSelected(KUrl)), this, SLOT(slotURLChanged(KUrl))); 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(); const QString kgreeterbackground = kgreetersettings.value("greeter/background", KGreeterDefaultBackground()).toString();
backgroundrequester->setUrl(KUrl(kgreeterbackground)); backgroundrequester->setUrl(KUrl(kgreeterbackground));
@ -156,6 +181,7 @@ void KCMGreeter::save()
kgreeteraction.addArgument("font", fontchooser->font().toString()); kgreeteraction.addArgument("font", fontchooser->font().toString());
kgreeteraction.addArgument("style", stylesbox->itemData(stylesbox->currentIndex()).toString()); kgreeteraction.addArgument("style", stylesbox->itemData(stylesbox->currentIndex()).toString());
kgreeteraction.addArgument("colorscheme", colorsbox->itemData(colorsbox->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("background", backgroundrequester->url().path());
kgreeteraction.addArgument("rectangle", rectanglerequester->url().path()); kgreeteraction.addArgument("rectangle", rectanglerequester->url().path());
KAuth::ActionReply kgreeterreply = kgreeteraction.execute(); KAuth::ActionReply kgreeterreply = kgreeteraction.execute();
@ -179,6 +205,7 @@ void KCMGreeter::defaults()
} }
} }
colorsbox->setCurrentIndex(0); colorsbox->setCurrentIndex(0);
cursorbox->setCurrentIndex(0);
backgroundrequester->setUrl(KUrl()); backgroundrequester->setUrl(KUrl());
rectanglerequester->setUrl(KUrl()); rectanglerequester->setUrl(KUrl());
@ -207,6 +234,13 @@ void KCMGreeter::slotColorChanged(const QString &color)
emit changed(true); emit changed(true);
} }
void KCMGreeter::slotCursorChanged(const QString &cursor)
{
Q_UNUSED(cursor);
enableTest(false);
emit changed(true);
}
void KCMGreeter::slotURLChanged(const QString &url) void KCMGreeter::slotURLChanged(const QString &url)
{ {
Q_UNUSED(url); Q_UNUSED(url);

View file

@ -47,6 +47,7 @@ private Q_SLOTS:
void slotFontChanged(const QFont &font); void slotFontChanged(const QFont &font);
void slotStyleChanged(const QString &style); void slotStyleChanged(const QString &style);
void slotColorChanged(const QString &color); void slotColorChanged(const QString &color);
void slotCursorChanged(const QString &cursor);
void slotURLChanged(const QString &url); void slotURLChanged(const QString &url);
void slotURLChanged(const KUrl &url); void slotURLChanged(const KUrl &url);

View file

@ -59,16 +59,6 @@
</item> </item>
<item row="1" column="0" colspan="3"> <item row="1" column="0" colspan="3">
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="3" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Color scheme:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
@ -79,10 +69,20 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Color scheme:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1"> <item row="3" column="1">
<widget class="QComboBox" name="colorsbox"/> <widget class="QComboBox" name="colorsbox"/>
</item> </item>
<item row="4" column="0"> <item row="5" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>Background:</string> <string>Background:</string>
@ -92,13 +92,16 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="6" column="1">
<widget class="KUrlRequester" name="backgroundrequester"/> <widget class="KUrlRequester" name="rectanglerequester"/>
</item> </item>
<item row="2" column="1"> <item row="2" column="1">
<widget class="QComboBox" name="stylesbox"/> <widget class="QComboBox" name="stylesbox"/>
</item> </item>
<item row="5" column="0"> <item row="5" column="1">
<widget class="KUrlRequester" name="backgroundrequester"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>Rectangle:</string> <string>Rectangle:</string>
@ -108,8 +111,15 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1"> <item row="4" column="1">
<widget class="KUrlRequester" name="rectanglerequester"/> <widget class="QComboBox" name="cursorbox"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Cursor theme:</string>
</property>
</widget>
</item> </item>
</layout> </layout>
</item> </item>

View file

@ -26,8 +26,8 @@
ActionReply KGreeterHelper::save(const QVariantMap &parameters) ActionReply KGreeterHelper::save(const QVariantMap &parameters)
{ {
if (!parameters.contains("font") || !parameters.contains("style") if (!parameters.contains("font") || !parameters.contains("style")
|| !parameters.contains("colorscheme") || !parameters.contains("background") || !parameters.contains("colorscheme") || !parameters.contains("cursortheme")
|| !parameters.contains("rectangle")) { || !parameters.contains("background") || !parameters.contains("rectangle")) {
return KAuth::ActionReply::HelperErrorReply; return KAuth::ActionReply::HelperErrorReply;
} }
@ -35,11 +35,16 @@ ActionReply KGreeterHelper::save(const QVariantMap &parameters)
if (colorscheme == QLatin1String("default")) { if (colorscheme == QLatin1String("default")) {
colorscheme = QString(); 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); QSettings kgreetersettings(KDE_SYSCONFDIR "/lightdm/lightdm-kgreeter-greeter.conf", QSettings::IniFormat);
kgreetersettings.setValue("greeter/font", parameters.value("font")); kgreetersettings.setValue("greeter/font", parameters.value("font"));
kgreetersettings.setValue("greeter/style", parameters.value("style")); kgreetersettings.setValue("greeter/style", parameters.value("style"));
kgreetersettings.setValue("greeter/colorscheme", colorscheme); kgreetersettings.setValue("greeter/colorscheme", colorscheme);
kgreetersettings.setValue("greeter/cursortheme", cursortheme);
kgreetersettings.setValue("greeter/background", parameters.value("background")); kgreetersettings.setValue("greeter/background", parameters.value("background"));
kgreetersettings.setValue("greeter/rectangle", parameters.value("rectangle")); kgreetersettings.setValue("greeter/rectangle", parameters.value("rectangle"));
if (kgreetersettings.status() != QSettings::NoError) { if (kgreetersettings.status() != QSettings::NoError) {

View file

@ -567,6 +567,12 @@ int main(int argc, char**argv)
app.setPalette(KGlobalSettings::createApplicationPalette()); 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); glibloop = g_main_loop_new(NULL, false);
KGreeter kgreeter; KGreeter kgreeter;

View file

@ -5,5 +5,6 @@
#font= #font=
#style= #style=
#colorscheme= #colorscheme=
#cursortheme=
#background= #background=
#rectangle= #rectangle=