From 30019c4a56bf6f3ab8d31bed71d18a053823310a Mon Sep 17 00:00:00 2001 From: Fushan Wen Date: Sat, 27 Aug 2022 22:49:37 +0800 Subject: [PATCH] Use `uint` data type in accent color dbus interface This is expected to slightly improve efficiency. --- .../colors/accentColorService/accentColorService.cpp | 11 ++++++++--- kcms/colors/accentColorService/accentColorService.h | 2 +- shell/dbus/org.kde.PlasmaShell.xml | 2 +- shell/desktopview.cpp | 12 ++++++------ shell/desktopview.h | 12 ++++++------ shell/shellcorona.cpp | 6 +++--- shell/shellcorona.h | 4 ++-- 7 files changed, 27 insertions(+), 22 deletions(-) diff --git a/kcms/colors/accentColorService/accentColorService.cpp b/kcms/colors/accentColorService/accentColorService.cpp index 250095a85..cac8efc94 100644 --- a/kcms/colors/accentColorService/accentColorService.cpp +++ b/kcms/colors/accentColorService/accentColorService.cpp @@ -24,10 +24,15 @@ AccentColorService::AccentColorService(QObject *parent, const QList &) dbus.registerService("org.kde.plasmashell.accentColor"); } -void AccentColorService::setAccentColor(const QString &accentColor) +void AccentColorService::setAccentColor(unsigned accentColor) { + const QColor color = QColor::fromRgba(accentColor); + if (!color.isValid()) { + return; + } + m_settings->load(); - if (QColor::isValidColor(accentColor) && m_settings->accentColorFromWallpaper()) { + if (m_settings->accentColorFromWallpaper()) { const QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("color-schemes/%1.colors").arg(m_settings->colorScheme())); @@ -40,7 +45,7 @@ void AccentColorService::setAccentColor(const QString &accentColor) // animation start event before we potentially trigger client side changes QDBusConnection::sessionBus().call(msg); - m_settings->setAccentColor(accentColor); + m_settings->setAccentColor(color); m_settings->save(); applyScheme(path, m_settings->config(), KConfig::Notify); notifyKcmChange(GlobalChangeType::PaletteChanged); diff --git a/kcms/colors/accentColorService/accentColorService.h b/kcms/colors/accentColorService/accentColorService.h index fba9fbd5a..5927ff48f 100644 --- a/kcms/colors/accentColorService/accentColorService.h +++ b/kcms/colors/accentColorService/accentColorService.h @@ -18,7 +18,7 @@ public: explicit AccentColorService(QObject *parent, const QList &); public Q_SLOTS: - void setAccentColor(const QString &color); + void setAccentColor(unsigned accentColor); private: ColorsSettings *m_settings; diff --git a/shell/dbus/org.kde.PlasmaShell.xml b/shell/dbus/org.kde.PlasmaShell.xml index 423a744c5..bf87da28d 100644 --- a/shell/dbus/org.kde.PlasmaShell.xml +++ b/shell/dbus/org.kde.PlasmaShell.xml @@ -16,7 +16,7 @@ - + diff --git a/shell/desktopview.cpp b/shell/desktopview.cpp index 2c3865743..29a819dd7 100644 --- a/shell/desktopview.cpp +++ b/shell/desktopview.cpp @@ -36,7 +36,7 @@ DesktopView::DesktopView(Plasma::Corona *corona, QScreen *targetScreen) : PlasmaQuick::ContainmentView(corona, nullptr) - , m_accentColor("transparent") + , m_accentColor(Qt::transparent) , m_windowType(Desktop) , m_shellSurface(nullptr) { @@ -82,7 +82,7 @@ DesktopView::DesktopView(Plasma::Corona *corona, QScreen *targetScreen) connect(static_cast(corona), &ShellCorona::accentColorFromWallpaperEnabledChanged, this, &DesktopView::usedInAccentColorChanged); connect(this, &DesktopView::usedInAccentColorChanged, this, [this] { if (!usedInAccentColor()) { - m_accentColor = QStringLiteral("transparent"); + m_accentColor = Qt::transparent; Q_EMIT accentColorChanged(m_accentColor); } }); @@ -152,12 +152,12 @@ bool DesktopView::usedInAccentColor() const return static_cast(corona())->accentColorFromWallpaperEnabled(); } -QString DesktopView::accentColor() const +QColor DesktopView::accentColor() const { return m_accentColor; } -void DesktopView::setAccentColor(const QString &accentColor) +void DesktopView::setAccentColor(const QColor &accentColor) { if (accentColor == m_accentColor) { return; @@ -444,12 +444,12 @@ void DesktopView::setupWaylandIntegration() } } -void DesktopView::setAccentColorFromWallpaper(const QString &accentColor) +void DesktopView::setAccentColorFromWallpaper(const QColor &accentColor) { if (!usedInAccentColor()) { return; } QDBusMessage applyAccentColor = QDBusMessage::createMethodCall("org.kde.plasmashell.accentColor", "/AccentColor", "", "setAccentColor"); - applyAccentColor << accentColor; + applyAccentColor << accentColor.rgba(); QDBusConnection::sessionBus().send(applyAccentColor); } diff --git a/shell/desktopview.h b/shell/desktopview.h index befd7d4ad..88b95e6e8 100644 --- a/shell/desktopview.h +++ b/shell/desktopview.h @@ -40,7 +40,7 @@ class DesktopView : public PlasmaQuick::ContainmentView */ Q_PROPERTY(bool usedInAccentColor READ usedInAccentColor NOTIFY usedInAccentColorChanged) - Q_PROPERTY(QString accentColor READ accentColor WRITE setAccentColor NOTIFY accentColorChanged) + Q_PROPERTY(QColor accentColor READ accentColor WRITE setAccentColor NOTIFY accentColorChanged) public: enum WindowType { @@ -71,8 +71,8 @@ public: bool usedInAccentColor() const; - QString accentColor() const; - void setAccentColor(const QString &); + QColor accentColor() const; + void setAccentColor(const QColor &); WindowType windowType() const; void setWindowType(WindowType type); @@ -104,16 +104,16 @@ Q_SIGNALS: void candidateContainmentsChanged(); void geometryChanged(); void usedInAccentColorChanged(); - void accentColorChanged(const QString &accentColor); + void accentColorChanged(const QColor &accentColor); private: void coronaPackageChanged(const KPackage::Package &package); void ensureWindowType(); void setupWaylandIntegration(); - void setAccentColorFromWallpaper(const QString &accentColor); + void setAccentColorFromWallpaper(const QColor &accentColor); bool handleKRunnerTextInput(QKeyEvent *e); - QString m_accentColor; + QColor m_accentColor; QPointer m_configView; QPointer m_oldScreen; QPointer m_screenToFollow; diff --git a/shell/shellcorona.cpp b/shell/shellcorona.cpp index 8f14f92c8..1797cc6dc 100644 --- a/shell/shellcorona.cpp +++ b/shell/shellcorona.cpp @@ -1503,13 +1503,13 @@ void ShellCorona::toggleDashboard() setDashboardShown(!KWindowSystem::showingDesktop()); } -QString ShellCorona::color() const +QRgb ShellCorona::color() const { auto const primaryDesktopViewExists = m_desktopViewForScreen.contains(m_screenPool->primaryScreen()); if (primaryDesktopViewExists) { - return m_desktopViewForScreen[m_screenPool->primaryScreen()]->accentColor(); + return m_desktopViewForScreen[m_screenPool->primaryScreen()]->accentColor().rgba(); } - return QStringLiteral("#00FFFFFF"); + return QColor(Qt::transparent).rgba(); } QString ShellCorona::evaluateScript(const QString &script) diff --git a/shell/shellcorona.h b/shell/shellcorona.h index 9b2fdff8a..be99c99f3 100644 --- a/shell/shellcorona.h +++ b/shell/shellcorona.h @@ -140,7 +140,7 @@ Q_SIGNALS: // A preview for this containment has been rendered and saved to disk void containmentPreviewReady(Plasma::Containment *containment, const QString &path); void accentColorFromWallpaperEnabledChanged(); - void colorChanged(const QString &color); + void colorChanged(const QColor &color); public Q_SLOTS: /** @@ -170,7 +170,7 @@ public Q_SLOTS: void toggleWidgetExplorer(); QString evaluateScript(const QString &string); void activateLauncherMenu(); - QString color() const; + QRgb color() const; QByteArray dumpCurrentLayoutJS() const;