From 90d0027e05e4a8c198fd046687eb54718233b2e7 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Mon, 15 Jun 2026 15:39:09 +0000 Subject: [PATCH] plasma-apply-lookandfeel: Optionally blend changes when changing color scheme Makes it consistent with merely changing color schemes. (cherry picked from commit 7e7f2a6cb408a6c38b55ecdde27d4c42e1cb06da) Co-authored-by: Kai Uwe Broulik --- kcms/lookandfeel/kcm.cpp | 2 +- kcms/lookandfeel/tool/lnftool.cpp | 2 +- libklookandfeel/klookandfeelmanager.cpp | 11 +++++++++++ libklookandfeel/klookandfeelmanager.h | 2 ++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/kcms/lookandfeel/kcm.cpp b/kcms/lookandfeel/kcm.cpp index ef6d80f87e..029bfbdc11 100644 --- a/kcms/lookandfeel/kcm.cpp +++ b/kcms/lookandfeel/kcm.cpp @@ -467,7 +467,7 @@ void KCMLookandFeel::apply() save(); if (!settings()->automaticLookAndFeel()) { - m_lnf->save(package, m_selectedContents); + m_lnf->save(package, m_selectedContents | KLookAndFeelManager::BlendChanges); } } diff --git a/kcms/lookandfeel/tool/lnftool.cpp b/kcms/lookandfeel/tool/lnftool.cpp index 1675d1b87d..669466b21d 100644 --- a/kcms/lookandfeel/tool/lnftool.cpp +++ b/kcms/lookandfeel/tool/lnftool.cpp @@ -96,7 +96,7 @@ int main(int argc, char **argv) } // By default do not modify the layout, unless explicitly specified - KLookAndFeelManager::Contents selection = KLookAndFeelManager::AppearanceSettings; + KLookAndFeelManager::Contents selection = KLookAndFeelManager::AppearanceSettings | KLookAndFeelManager::BlendChanges; if (parser.isSet(_resetLayout)) { selection |= KLookAndFeelManager::LayoutSettings; } diff --git a/libklookandfeel/klookandfeelmanager.cpp b/libklookandfeel/klookandfeelmanager.cpp index 83593dfd3b..30b00e7a5e 100644 --- a/libklookandfeel/klookandfeelmanager.cpp +++ b/libklookandfeel/klookandfeelmanager.cpp @@ -484,6 +484,17 @@ void KLookAndFeelManager::save(const KPackage::Package &package, Contents applyM const QString packageId = package.metadata().pluginId(); const Contents itemsToApply = packageContents(package) & applyMask; + if (itemsToApply.testFlag(Colors) && applyMask.testFlag(BlendChanges) && m_mode == Mode::Apply) { + auto msg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.KWin"), + QStringLiteral("/org/kde/KWin/BlendChanges"), + QStringLiteral("org.kde.KWin.BlendChanges"), + QStringLiteral("start")); + msg << 800; + // This is deliberately blocking so that we ensure Kwin has processed the + // animation start event before we potentially trigger client side changes + QDBusConnection::sessionBus().call(msg); + } + if (itemsToApply.testFlag(DesktopLayout) && m_mode == Mode::Apply) { QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.plasmashell"), QStringLiteral("/PlasmaShell"), diff --git a/libklookandfeel/klookandfeelmanager.h b/libklookandfeel/klookandfeelmanager.h index 7cc51b8239..2f4b3483c9 100644 --- a/libklookandfeel/klookandfeelmanager.h +++ b/libklookandfeel/klookandfeelmanager.h @@ -56,6 +56,8 @@ public: // General Flag combinations KWinSettings = WindowSwitcher | WindowDecoration | WindowPlacement | TitlebarLayout | BorderSize, AllSettings = (1 << 26) - 1, + // Animate settings change (this blocks for 300ms during the animation!) + BlendChanges = (1 << 30), }; Q_DECLARE_FLAGS(Contents, ContentFlags) Q_FLAG(Contents) -- GitLab