From 455ceca14bf7a385abb819d5827a1b61f4e48913 Mon Sep 17 00:00:00 2001 From: Fushan Wen Date: Thu, 23 Mar 2023 00:12:50 +0800 Subject: [PATCH] settings: provide accent-color settings Proposal: https://github.com/flatpak/xdg-desktop-portal/pull/815 GNOME implementation: https://gitlab.gnome.org/GNOME/xdg-desktop-portal-gnome/-/merge_requests/82 --- src/settings.cpp | 24 ++++++++++++++++++++---- src/settings.h | 7 +++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/settings.cpp b/src/settings.cpp index d18755fb..79a698dc 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -93,6 +93,7 @@ void SettingsPortal::ReadAll(const QStringList &groups) if (groupMatches(QStringLiteral("org.freedesktop.appearance"), groups)) { QVariantMap appearanceSettings; appearanceSettings.insert(QStringLiteral("color-scheme"), readFdoColorScheme().variant()); + appearanceSettings.insert(QStringLiteral("accent-color"), readAccentColor().variant()); result.insert(QStringLiteral("org.freedesktop.appearance"), appearanceSettings); } @@ -148,10 +149,16 @@ void SettingsPortal::Read(const QString &group, const QString &key) QDBusMessage reply; QDBusMessage message = q_ptr->message(); - if (group == QLatin1String("org.freedesktop.appearance") && key == QLatin1String("color-scheme")) { - reply = message.createReply(QVariant::fromValue(readFdoColorScheme())); - QDBusConnection::sessionBus().send(reply); - return; + if (group == QLatin1String("org.freedesktop.appearance")) { + if (key == QLatin1String("color-scheme")) { + reply = message.createReply(QVariant::fromValue(readFdoColorScheme())); + QDBusConnection::sessionBus().send(reply); + return; + } else if (key == QLatin1String("accent-color")) { + reply = message.createReply(QVariant::fromValue(readAccentColor())); + QDBusConnection::sessionBus().send(reply); + return; + } } // All other namespaces start with this prefix else if (!group.startsWith(QStringLiteral("org.kde.kdeglobals"))) { @@ -192,6 +199,9 @@ void SettingsPortal::globalSettingChanged(int type, int arg) readProperty(QStringLiteral("org.kde.kdeglobals.General"), QStringLiteral("ColorScheme"))); Q_EMIT SettingChanged(QStringLiteral("org.freedesktop.appearance"), QStringLiteral("color-scheme"), readFdoColorScheme()); + + // https://github.com/flatpak/xdg-desktop-portal/pull/815 + Q_EMIT SettingChanged(QStringLiteral("org.freedesktop.appearance"), QStringLiteral("accent-color"), readAccentColor()); break; case FontChanged: fontChanged(); @@ -270,3 +280,9 @@ QDBusVariant SettingsPortal::readFdoColorScheme() return QDBusVariant(result); } + +QDBusVariant SettingsPortal::readAccentColor() const +{ + const QColor accentColor = qGuiApp->palette().highlight().color(); + return QDBusVariant(QVariantList{accentColor.redF(), accentColor.greenF(), accentColor.blueF()}); +} diff --git a/src/settings.h b/src/settings.h index 1ec0f77b..e6642315 100644 --- a/src/settings.h +++ b/src/settings.h @@ -74,6 +74,13 @@ private Q_SLOTS: private: QDBusVariant readProperty(const QString &group, const QString &key); + + /** + * Returns a list that contains redF, blueF and greenF and represents + * the current accent color. + * Format: (ddd) + */ + QDBusVariant readAccentColor() const; QDBusVariant readFdoColorScheme(); KSharedConfigPtr m_kdeglobals;