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)));
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);

View file

@ -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);

View file

@ -59,16 +59,6 @@
</item>
<item row="1" column="0" colspan="3">
<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">
<widget class="QLabel" name="label">
<property name="text">
@ -79,10 +69,20 @@
</property>
</widget>
</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">
<widget class="QComboBox" name="colorsbox"/>
</item>
<item row="4" column="0">
<item row="5" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Background:</string>
@ -92,13 +92,16 @@
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="KUrlRequester" name="backgroundrequester"/>
<item row="6" column="1">
<widget class="KUrlRequester" name="rectanglerequester"/>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="stylesbox"/>
</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">
<property name="text">
<string>Rectangle:</string>
@ -108,8 +111,15 @@
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="KUrlRequester" name="rectanglerequester"/>
<item row="4" column="1">
<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>
</layout>
</item>

View file

@ -26,8 +26,8 @@
ActionReply KGreeterHelper::save(const QVariantMap &parameters)
{
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 &parameters)
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) {

View file

@ -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;

View file

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