From b989e4b7f0b5c59b0960c1172db186021c6ad993 Mon Sep 17 00:00:00 2001 From: Anders da Silva Rytter Hansen Date: Fri, 3 Jul 2026 23:02:45 -0300 Subject: [PATCH 1/4] testing approach --- ...onic-win-6.6.4-panel-compositor-atom.patch | 218 ++++++++++++++++++ sonic-win/sonic-win.spec | 9 +- ...orkspace-6.6.4-panel-compositor-atom.patch | 112 +++++++++ sonic-workspace/sonic-workspace.spec | 10 +- 4 files changed, 345 insertions(+), 4 deletions(-) create mode 100644 sonic-win/sonic-win-6.6.4-panel-compositor-atom.patch create mode 100644 sonic-workspace/sonic-workspace-6.6.4-panel-compositor-atom.patch diff --git a/sonic-win/sonic-win-6.6.4-panel-compositor-atom.patch b/sonic-win/sonic-win-6.6.4-panel-compositor-atom.patch new file mode 100644 index 0000000..328452b --- /dev/null +++ b/sonic-win/sonic-win-6.6.4-panel-compositor-atom.patch @@ -0,0 +1,218 @@ +diff -ruN a/src/events.cpp b/src/events.cpp +--- a/src/events.cpp 2026-04-08 10:00:41.000000000 -0300 ++++ b/src/events.cpp 2026-07-03 20:48:53.648591796 -0300 +@@ -398,7 +398,7 @@ + } + if ((dirtyProperties & NET::WMStrut) != 0 + || (dirtyProperties2 & NET::WM2ExtendedStrut) != 0) { +- workspace()->rearrange(); ++ workspace()->scheduleRearrange(); + } + if ((dirtyProperties & NET::WMIcon) != 0) { + getIcons(); +diff -ruN a/src/plugins/backgroundcontrast/contrast.cpp b/src/plugins/backgroundcontrast/contrast.cpp +--- a/src/plugins/backgroundcontrast/contrast.cpp 2026-04-08 10:00:41.000000000 -0300 ++++ b/src/plugins/backgroundcontrast/contrast.cpp 2026-07-03 20:52:36.464290127 -0300 +@@ -28,6 +28,7 @@ + { + + static const QByteArray s_contrastAtomName = QByteArrayLiteral("_KDE_NET_WM_BACKGROUND_CONTRAST_REGION"); ++static const QByteArray s_panelAnimatingAtomName = QByteArrayLiteral("_SONIC_WM_PANEL_ANIMATING"); + + ContrastManagerInterface *ContrastEffect::s_contrastManager = nullptr; + QTimer *ContrastEffect::s_contrastManagerRemoveTimer = nullptr; +@@ -42,6 +43,12 @@ + if (m_shader && m_shader->isValid()) { + if (effects->xcbConnection()) { + m_net_wm_contrast_region = effects->announceSupportProperty(s_contrastAtomName, this); ++ xcb_connection_t *c = effects->xcbConnection(); ++ xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(c, xcb_intern_atom_unchecked(c, false, s_panelAnimatingAtomName.length(), s_panelAnimatingAtomName.constData()), nullptr); ++ if (reply) { ++ m_panelAnimatingAtom = reply->atom; ++ free(reply); ++ } + } + } + +@@ -53,6 +60,14 @@ + connect(effects, &EffectsHandler::xcbConnectionChanged, this, [this]() { + if (m_shader && m_shader->isValid()) { + m_net_wm_contrast_region = effects->announceSupportProperty(s_contrastAtomName, this); ++ if (effects->xcbConnection()) { ++ xcb_connection_t *c = effects->xcbConnection(); ++ xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(c, xcb_intern_atom_unchecked(c, false, s_panelAnimatingAtomName.length(), s_panelAnimatingAtomName.constData()), nullptr); ++ if (reply) { ++ m_panelAnimatingAtom = reply->atom; ++ free(reply); ++ } ++ } + } + }); + +@@ -182,11 +197,36 @@ + + void ContrastEffect::slotPropertyNotify(EffectWindow *w, long atom) + { +- if (w && atom == m_net_wm_contrast_region && m_net_wm_contrast_region != XCB_ATOM_NONE) { ++ if (!w) { ++ return; ++ } ++ if (atom == m_panelAnimatingAtom && m_panelAnimatingAtom != XCB_ATOM_NONE) { ++ if (!isPanelAnimating(w)) { ++ updateContrastRegion(w); ++ } ++ return; ++ } ++ if (atom == m_net_wm_contrast_region && m_net_wm_contrast_region != XCB_ATOM_NONE) { ++ if (isPanelAnimating(w)) { ++ return; ++ } + updateContrastRegion(w); + } + } + ++bool ContrastEffect::isPanelAnimating(EffectWindow *w) const ++{ ++ if (m_panelAnimatingAtom == XCB_ATOM_NONE) { ++ return false; ++ } ++ const QByteArray value = w->readProperty(m_panelAnimatingAtom, XCB_ATOM_CARDINAL, 32); ++ if (value.size() < static_cast(sizeof(uint32_t))) { ++ return false; ++ } ++ const uint32_t *cardinals = reinterpret_cast(value.constData()); ++ return cardinals[0] != 0; ++} ++ + QMatrix4x4 ContrastEffect::colorMatrix(qreal contrast, qreal intensity, qreal saturation) + { + QMatrix4x4 satMatrix; // saturation +diff -ruN a/src/plugins/backgroundcontrast/contrast.h b/src/plugins/backgroundcontrast/contrast.h +--- a/src/plugins/backgroundcontrast/contrast.h 2026-04-08 10:00:41.000000000 -0300 ++++ b/src/plugins/backgroundcontrast/contrast.h 2026-07-03 20:52:02.805738497 -0300 +@@ -57,6 +57,7 @@ + QRegion contrastRegion(const EffectWindow *w) const; + bool shouldContrast(const EffectWindow *w, int mask, const WindowPaintData &data) const; + void updateContrastRegion(EffectWindow *w); ++ bool isPanelAnimating(EffectWindow *w) const; + void doContrast(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, const QRegion &shape, const float opacity, const QMatrix4x4 &screenProjection); + void uploadRegion(std::span map, const QRegion ®ion, qreal scale); + Q_REQUIRED_RESULT bool uploadGeometry(GLVertexBuffer *vbo, const QRegion ®ion, qreal scale); +@@ -65,6 +66,7 @@ + std::unique_ptr m_shader; + + long m_net_wm_contrast_region = 0; ++ long m_panelAnimatingAtom = 0; + QHash m_contrastChangedConnections; // used only in Wayland to keep track of effect changed + struct Data + { +diff -ruN a/src/plugins/blur/blur.cpp b/src/plugins/blur/blur.cpp +--- a/src/plugins/blur/blur.cpp 2026-04-08 10:00:41.000000000 -0300 ++++ b/src/plugins/blur/blur.cpp 2026-07-03 20:52:27.003135068 -0300 +@@ -48,6 +48,7 @@ + { + + static const QByteArray s_blurAtomName = QByteArrayLiteral("_KDE_NET_WM_BLUR_BEHIND_REGION"); ++static const QByteArray s_panelAnimatingAtomName = QByteArrayLiteral("_SONIC_WM_PANEL_ANIMATING"); + + BlurManagerInterface *BlurEffect::s_blurManager = nullptr; + QTimer *BlurEffect::s_blurManagerRemoveTimer = nullptr; +@@ -125,6 +126,12 @@ + + if (effects->xcbConnection()) { + net_wm_blur_region = effects->announceSupportProperty(s_blurAtomName, this); ++ xcb_connection_t *c = effects->xcbConnection(); ++ xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(c, xcb_intern_atom_unchecked(c, false, s_panelAnimatingAtomName.length(), s_panelAnimatingAtomName.constData()), nullptr); ++ if (reply) { ++ m_panelAnimatingAtom = reply->atom; ++ free(reply); ++ } + } + + connect(effects, &EffectsHandler::windowAdded, this, &BlurEffect::slotWindowAdded); +@@ -132,6 +139,14 @@ + connect(effects, &EffectsHandler::propertyNotify, this, &BlurEffect::slotPropertyNotify); + connect(effects, &EffectsHandler::xcbConnectionChanged, this, [this]() { + net_wm_blur_region = effects->announceSupportProperty(s_blurAtomName, this); ++ if (effects->xcbConnection()) { ++ xcb_connection_t *c = effects->xcbConnection(); ++ xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(c, xcb_intern_atom_unchecked(c, false, s_panelAnimatingAtomName.length(), s_panelAnimatingAtomName.constData()), nullptr); ++ if (reply) { ++ m_panelAnimatingAtom = reply->atom; ++ free(reply); ++ } ++ } + }); + + // Fetch the blur regions for all windows +@@ -292,11 +307,38 @@ + + void BlurEffect::slotPropertyNotify(EffectWindow *w, long atom) + { +- if (w && atom == net_wm_blur_region && net_wm_blur_region != XCB_ATOM_NONE) { ++ if (!w) { ++ return; ++ } ++ if (atom == m_panelAnimatingAtom && m_panelAnimatingAtom != XCB_ATOM_NONE) { ++ // When the panel stops animating, apply any blur region updates we deferred. ++ if (!isPanelAnimating(w)) { ++ updateBlurRegion(w); ++ } ++ return; ++ } ++ if (atom == net_wm_blur_region && net_wm_blur_region != XCB_ATOM_NONE) { ++ if (isPanelAnimating(w)) { ++ // Defer blur region updates until the panel finishes its animation. ++ return; ++ } + updateBlurRegion(w); + } + } + ++bool BlurEffect::isPanelAnimating(EffectWindow *w) const ++{ ++ if (m_panelAnimatingAtom == XCB_ATOM_NONE) { ++ return false; ++ } ++ const QByteArray value = w->readProperty(m_panelAnimatingAtom, XCB_ATOM_CARDINAL, 32); ++ if (value.size() < static_cast(sizeof(uint32_t))) { ++ return false; ++ } ++ const uint32_t *cardinals = reinterpret_cast(value.constData()); ++ return cardinals[0] != 0; ++} ++ + void BlurEffect::setupDecorationConnections(EffectWindow *w) + { + if (!w->decoration()) { +diff -ruN a/src/plugins/blur/blur.h b/src/plugins/blur/blur.h +--- a/src/plugins/blur/blur.h 2026-04-08 10:00:41.000000000 -0300 ++++ b/src/plugins/blur/blur.h 2026-07-03 20:51:43.097415496 -0300 +@@ -83,6 +83,7 @@ + bool decorationSupportsBlurBehind(const EffectWindow *w) const; + bool shouldBlur(const EffectWindow *w, int mask, const WindowPaintData &data) const; + void updateBlurRegion(EffectWindow *w); ++ bool isPanelAnimating(EffectWindow *w) const; + void blur(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, const QRegion ®ion, WindowPaintData &data); + GLTexture *ensureNoiseTexture(); + +@@ -136,6 +137,7 @@ + + bool m_valid = false; + long net_wm_blur_region = 0; ++ long m_panelAnimatingAtom = 0; + QRegion m_paintedArea; // keeps track of all painted areas (from bottom to top) + QRegion m_currentBlur; // keeps track of the currently blured area of the windows(from bottom to top) + +diff -ruN a/src/workspace.cpp b/src/workspace.cpp +--- a/src/workspace.cpp 2026-04-08 10:00:41.000000000 -0300 ++++ b/src/workspace.cpp 2026-07-03 20:48:53.649393515 -0300 +@@ -2178,7 +2178,7 @@ + + void Workspace::scheduleRearrange() + { +- m_rearrangeTimer.start(0); ++ m_rearrangeTimer.start(50); + } + + void Workspace::rearrange() diff --git a/sonic-win/sonic-win.spec b/sonic-win/sonic-win.spec index 49ed064..7ce8585 100644 --- a/sonic-win/sonic-win.spec +++ b/sonic-win/sonic-win.spec @@ -4,7 +4,7 @@ Name: sonic-win Version: 6.6.4 -Release: 12%{?dist} +Release: 14%{?dist} Summary: KDE Window manager License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND GPL-3.0-or-later AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT @@ -18,7 +18,7 @@ URL: https://github.com/Sonic-DE/%{name} Source0: %{url}/archive/refs/tags/%{version}.tar.gz#/%{name}-%{version}.tar.gz ## upstream patches -Patch0: sonic-win-6.6.4-strut-throttle.patch +Patch0: sonic-win-6.6.4-panel-compositor-atom.patch ## proposed patches @@ -298,6 +298,11 @@ mkdir -p %{buildroot}%{_sysconfdir}/xdg/Xwayland-session.d %changelog +* Fri Jul 03 2026 Anders da Silva Rytter Hansen - 6.6.4-13 +- Batch blur and contrast region updates for panels that set the private + _SONIC_WM_PANEL_ANIMATING X atom during floating animation, keeping the + strut-throttling behavior in place. + * Thu Jul 02 2026 Anders da Silva Rytter Hansen - 6.6.4-12 - Batch strut-triggered workspace rearranges to reduce stutter during panel state transitions. diff --git a/sonic-workspace/sonic-workspace-6.6.4-panel-compositor-atom.patch b/sonic-workspace/sonic-workspace-6.6.4-panel-compositor-atom.patch new file mode 100644 index 0000000..70e39db --- /dev/null +++ b/sonic-workspace/sonic-workspace-6.6.4-panel-compositor-atom.patch @@ -0,0 +1,112 @@ +diff -ruN a/shell/panelview.cpp b/shell/panelview.cpp +--- a/shell/panelview.cpp 2026-04-08 06:33:10.000000000 -0300 ++++ b/shell/panelview.cpp 2026-07-03 21:54:49.238018607 -0300 +@@ -1364,6 +1364,37 @@ + } + } + ++void PanelView::setPanelAnimating(bool animating) ++{ ++ if (!KX11Extras::compositingActive()) { ++ return; ++ } ++ auto *x11App = qGuiApp->nativeInterface(); ++ if (!x11App) { ++ return; ++ } ++ xcb_connection_t *connection = x11App->connection(); ++ if (m_panelAnimatingAtom == XCB_ATOM_NONE) { ++ constexpr QByteArrayView atomName("_SONIC_WM_PANEL_ANIMATING"); ++ xcb_intern_atom_cookie_t cookie = xcb_intern_atom_unchecked(connection, false, atomName.length(), atomName.constData()); ++ xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(connection, cookie, nullptr); ++ if (reply) { ++ m_panelAnimatingAtom = reply->atom; ++ free(reply); ++ } ++ } ++ if (m_panelAnimatingAtom == XCB_ATOM_NONE) { ++ return; ++ } ++ if (animating) { ++ uint32_t value = 1; ++ xcb_change_property(connection, XCB_PROP_MODE_REPLACE, winId(), m_panelAnimatingAtom, XCB_ATOM_CARDINAL, 32, 1, &value); ++ } else { ++ xcb_delete_property(connection, winId(), m_panelAnimatingAtom); ++ } ++ xcb_flush(connection); ++} ++ + bool PanelView::canSetStrut() const + { + // read the wm name, need to do this every time which means a roundtrip unfortunately +@@ -1587,10 +1618,10 @@ + return; + } + m_floatingness = get(value); +- positionAndResizePanel(); + }); + connect(&m_floatingnessAnimation, &QPropertyAnimation::finished, rootObject, [this]() { +- updateMask(); ++ setPanelAnimating(false); ++ positionAndResizePanel(); + }); + connect(rootObject, SIGNAL(minPanelHeightChanged()), this, SLOT(updatePadding())); + connect(rootObject, SIGNAL(minPanelWidthChanged()), this, SLOT(updatePadding())); +@@ -1784,12 +1815,24 @@ + m_topFloatingPadding = rootObject()->property("fixedTopFloatingPadding").toInt(); + m_bottomFloatingPadding = rootObject()->property("fixedBottomFloatingPadding").toInt(); + ++ const bool instantAnimation = m_floatingnessAnimation.duration() == 0; ++ if (instantAnimation) { ++ // Skip the animation; jump straight to the target value. ++ m_floatingness = m_floatingnessAnimation.endValue().toDouble(); ++ rootObject()->setProperty("floatingness", m_floatingness); ++ } ++ + positionAndResizePanel(); + updateExclusiveZone(); + updateShadows(); + + // positionPanel and updateMask are called by m_floatingnessAnimation + if (m_floatingnessAnimation.targetObject()) { ++ if (instantAnimation) { ++ updateMask(); ++ return; ++ } ++ setPanelAnimating(true); + m_floatingnessAnimation.start(); + } + } +diff -ruN a/shell/panelview.h b/shell/panelview.h +--- a/shell/panelview.h 2026-04-08 06:33:10.000000000 -0300 ++++ b/shell/panelview.h 2026-07-03 20:50:54.914625829 -0300 +@@ -8,10 +8,13 @@ + + #include + #include ++#include + #include + #include + #include // For WId + ++#include ++ + #include + #include + +@@ -307,6 +310,7 @@ + void handleQmlStatusChange(QQmlComponent::Status status); + void updateMask(); + void updateEnabledBorders(); ++ void setPanelAnimating(bool animating); + void updatePadding(); + void updateFloating(); + void updateFloatingAnimationDuration(); +@@ -363,6 +367,7 @@ + LengthMode m_lengthMode; + Plasma::Theme m_theme; + QTimer m_unhideTimer; ++ xcb_atom_t m_panelAnimatingAtom = XCB_ATOM_NONE; + Plasma::Types::BackgroundHints m_backgroundHints; + KSvg::FrameSvg::EnabledBorders m_enabledBorders = KSvg::FrameSvg::AllBorders; + QPointer m_lastScreen; diff --git a/sonic-workspace/sonic-workspace.spec b/sonic-workspace/sonic-workspace.spec index 8413b1b..3313d39 100644 --- a/sonic-workspace/sonic-workspace.spec +++ b/sonic-workspace/sonic-workspace.spec @@ -7,7 +7,7 @@ Name: sonic-workspace Summary: Plasma workspace, applications and applets Version: 6.6.4 -Release: 15%{?dist} +Release: 16%{?dist} # Automatically converted from old format: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT - review is highly recommended. License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT @@ -37,7 +37,7 @@ Source40: ssh-agent.conf Source41: spice-vdagent.conf ## upstream patches -Patch0: sonic-workspace-6.6.4-mask-throttle.patch +Patch0: sonic-workspace-6.6.4-panel-compositor-atom.patch ## upstreamable Patches @@ -691,6 +691,12 @@ fi %changelog +* Fri Jul 03 2026 Anders da Silva Rytter Hansen - 6.6.4-16 +- Move panel floating animation coordination into the compositor via a private + _SONIC_WM_PANEL_ANIMATING X atom. The panel no longer throttles its own mask + updates; instead it tells the compositor when it is animating, and the + compositor batches blur/contrast region updates until the animation finishes. + * Thu Jul 02 2026 Anders da Silva Rytter Hansen - 6.6.4-15 - Reduce per-frame compositor work during panel floating animation: throttle blur/contrast mask updates and avoid setGeometry/slideWindow From 4b1ce0dd17c4b49d3220555f2907cc65d0908ca5 Mon Sep 17 00:00:00 2001 From: Anders da Silva Rytter Hansen Date: Sat, 4 Jul 2026 09:58:36 -0300 Subject: [PATCH 2/4] Revert "Revert previous workaround and fix it in a more correct way in Sonic-Win and Sonic-Workspace by not updating by every single frame but instead update per 50ms" This reverts commit cf0089e10065c4d2d0b97f90007fa829dc7c8e01. --- ...esktop-interface-6.6.4-x11-panel-lag.patch | 39 ++++++ .../sonic-desktop-interface.spec | 10 +- .../sonic-win-6.6.4-strut-throttle.patch | 42 ------- sonic-win/sonic-win.spec | 7 +- .../sonic-workspace-6.6.4-mask-throttle.patch | 114 ------------------ .../sonic-workspace-6.6.4-x11-panel-lag.patch | 42 +++++++ sonic-workspace/sonic-workspace.spec | 12 +- 7 files changed, 93 insertions(+), 173 deletions(-) create mode 100644 sonic-desktop-interface/sonic-desktop-interface-6.6.4-x11-panel-lag.patch delete mode 100644 sonic-win/sonic-win-6.6.4-strut-throttle.patch delete mode 100644 sonic-workspace/sonic-workspace-6.6.4-mask-throttle.patch create mode 100644 sonic-workspace/sonic-workspace-6.6.4-x11-panel-lag.patch diff --git a/sonic-desktop-interface/sonic-desktop-interface-6.6.4-x11-panel-lag.patch b/sonic-desktop-interface/sonic-desktop-interface-6.6.4-x11-panel-lag.patch new file mode 100644 index 0000000..9f5dc0b --- /dev/null +++ b/sonic-desktop-interface/sonic-desktop-interface-6.6.4-x11-panel-lag.patch @@ -0,0 +1,39 @@ +From: Anders da Silva Rytter Hansen +Date: Thu, 2 Jul 2026 10:47:00 -0300 +Subject: [PATCH] desktoppackage: disable panel floating/opacity animations + +Disable the floating and opacity transitions so the panel changes state instantly and stays fluid. +This fixes the UI lag, when switching virtual desktops. + +References: https://bugs.kde.org/show_bug.cgi?id=484501 and https://github.com/orgs/Sonic-DE/discussions/20 +--- + desktoppackage/contents/views/Panel.qml | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +diff --git a/desktoppackage/contents/views/Panel.qml b/desktoppackage/contents/views/Panel.qml +--- a/desktoppackage/contents/views/Panel.qml ++++ b/desktoppackage/contents/views/Panel.qml +@@ -133,19 +133,15 @@ + } + + // Floatingness is a value in [0, 1] that's multiplied to the floating margin; 0: not floating, 1: floating, between 0 and 1: animation between the two states +- readonly property int floatingnessAnimationDuration: Kirigami.Units.longDuration ++ // Disable the panel geometry animation: animated resizes of the panel ++ // window cause synchronous compositor work that stalls the desktop during ++ // virtual-desktop switches. ++ readonly property int floatingnessAnimationDuration: 0 + property double floatingnessTarget: 0.0 // The animation is handled in panelview.cpp for efficiency + property double floatingness: 0.0 + + // PanelOpacity is a value in [0, 1] that's used as the opacity of the opaque elements over the transparent ones; values between 0 and 1 are used for animations + property double panelOpacity +- Behavior on panelOpacity { +- NumberAnimation { +- duration: Kirigami.Units.longDuration +- easing.type: Easing.OutCubic +- } +- } +- + KSvg.FrameSvgItem { + id: translucentItem + visible: root.floatingness === 0 && root.panelOpacity !== 1 diff --git a/sonic-desktop-interface/sonic-desktop-interface.spec b/sonic-desktop-interface/sonic-desktop-interface.spec index f13152c..34a5dcb 100644 --- a/sonic-desktop-interface/sonic-desktop-interface.spec +++ b/sonic-desktop-interface/sonic-desktop-interface.spec @@ -11,7 +11,7 @@ Name: sonic-desktop-interface Summary: Plasma Desktop shell Version: 6.6.4 -Release: 13%{?dist} +Release: 12%{?dist} License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) #URL: https://invent.kde.org/plasma/%{name} @@ -35,6 +35,11 @@ Source20: breeze-fedora-0.3.tar.gz # Do not remove this as it breaks Fedora's QA policy Patch101: hide-virtual-keyboard-indicator-on-sddm.patch +# Disable panel floating/opacity animations. Animated panel resizes cause +# synchronous compositor work that stalls the desktop when switching virtual +# desktops, so make the panel state changes instant instead. +Patch102: sonic-desktop-interface-6.6.4-x11-panel-lag.patch + ## upstreamable patches BuildRequires: pkgconfig(libusb) @@ -393,9 +398,6 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/kaccess.desktop %changelog -* Thu Jul 02 2026 Anders da Silva Rytter Hansen - 6.6.4-13 -- Revert previous workaround and fix issue in Sonic-Win and Sonic-Workspace instead. - * Thu Jul 02 2026 Anders da Silva Rytter Hansen - 6.6.4-12 - Disable panel floating/opacity animations to avoid stutter when the panel changes state (e.g. switching virtual desktops). diff --git a/sonic-win/sonic-win-6.6.4-strut-throttle.patch b/sonic-win/sonic-win-6.6.4-strut-throttle.patch deleted file mode 100644 index 11df64b..0000000 --- a/sonic-win/sonic-win-6.6.4-strut-throttle.patch +++ /dev/null @@ -1,42 +0,0 @@ -From: Anders da Silva Rytter Hansen -Date: Thu, 02 Jul 2026 12:00:00 +0000 -Subject: [PATCH] Batch strut-triggered workspace rearranges to reduce stutter - -When a panel animates between floating and docked states it can change -its strut several times in quick succession. KWin handled those by -calling Workspace::rearrange() immediately, which recalculates work areas -and calls checkWorkspacePosition() on every client. That O(n) work on -every strut update causes visible stutter on X11 when other animations -are running. - -Use the existing scheduleRearrange() path instead and bump its timer -from 0 ms to 50 ms so rapid strut changes are coalesced into a single -re-layout. This keeps the work area correct while reducing the amount -of synchronous work done during panel transitions. ---- - src/events.cpp | 2 +- - src/workspace.cpp | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - ---- a/src/events.cpp 2026-04-08 10:00:41.000000000 -0300 -+++ b/src/events.cpp 2026-07-02 12:20:39.184413094 -0300 -@@ -398,7 +398,7 @@ - } - if ((dirtyProperties & NET::WMStrut) != 0 - || (dirtyProperties2 & NET::WM2ExtendedStrut) != 0) { -- workspace()->rearrange(); -+ workspace()->scheduleRearrange(); - } - if ((dirtyProperties & NET::WMIcon) != 0) { - getIcons(); ---- a/src/workspace.cpp 2026-04-08 10:00:41.000000000 -0300 -+++ b/src/workspace.cpp 2026-07-02 12:20:49.966586529 -0300 -@@ -2178,7 +2178,7 @@ - - void Workspace::scheduleRearrange() - { -- m_rearrangeTimer.start(0); -+ m_rearrangeTimer.start(50); - } - - void Workspace::rearrange() diff --git a/sonic-win/sonic-win.spec b/sonic-win/sonic-win.spec index 49ed064..6050e59 100644 --- a/sonic-win/sonic-win.spec +++ b/sonic-win/sonic-win.spec @@ -4,7 +4,7 @@ Name: sonic-win Version: 6.6.4 -Release: 12%{?dist} +Release: 11%{?dist} Summary: KDE Window manager License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND GPL-3.0-or-later AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT @@ -18,7 +18,6 @@ URL: https://github.com/Sonic-DE/%{name} Source0: %{url}/archive/refs/tags/%{version}.tar.gz#/%{name}-%{version}.tar.gz ## upstream patches -Patch0: sonic-win-6.6.4-strut-throttle.patch ## proposed patches @@ -298,10 +297,6 @@ mkdir -p %{buildroot}%{_sysconfdir}/xdg/Xwayland-session.d %changelog -* Thu Jul 02 2026 Anders da Silva Rytter Hansen - 6.6.4-12 -- Batch strut-triggered workspace rearranges to reduce stutter during panel - state transitions. - * Sun Apr 12 2026 Steve Cossette - 6.6.4-2 - Added evdev as BR for controller support (#22) diff --git a/sonic-workspace/sonic-workspace-6.6.4-mask-throttle.patch b/sonic-workspace/sonic-workspace-6.6.4-mask-throttle.patch deleted file mode 100644 index f550b47..0000000 --- a/sonic-workspace/sonic-workspace-6.6.4-mask-throttle.patch +++ /dev/null @@ -1,114 +0,0 @@ -From: Anders da Silva Rytter Hansen -Date: Thu, 02 Jul 2026 13:00:00 +0000 -Subject: [PATCH] Reduce per-frame compositor work during panel floating animation - -PanelView::updateMask() is called once per animation frame while the -panel transitions between docked and floating. It calls -KWindowEffects::enableBlurBehind() and enableBackgroundContrast() which -update the compositor's effect region via X11/D-Bus. Doing this for -every frame causes visible stutter when other animations are running. - -Additionally, the animation's valueChanged handler was calling -positionAndResizePanel() every frame, which calls setGeometry(), -emits availableScreenRegionChanged() and calls slideWindow() every -frame even though the panel's X window geometry is constant during the -animation. - -Coalesce the blur/contrast updates with a 50 ms single-shot timer and -replace the per-frame positionAndResizePanel() call with a lightweight -updateMask() call. Finalize geometry and effects once when the -animation finishes. This keeps the QML geometry/opacity animation -smooth while drastically reducing synchronous work sent to the -compositor. ---- - shell/panelview.cpp | 19 +++++++++++++++++++ - shell/panelview.h | 5 +++++ - 2 files changed, 24 insertions(+) - ---- a/shell/panelview.h 2026-04-08 06:33:10.000000000 -0300 -+++ b/shell/panelview.h 2026-07-02 13:09:59.011179892 -0300 -@@ -8,6 +8,7 @@ - - #include - #include -+#include - #include - #include - #include // For WId -@@ -306,6 +307,7 @@ - void adaptToScreen(); - void handleQmlStatusChange(QQmlComponent::Status status); - void updateMask(); -+ void applyPendingMaskUpdate(); - void updateEnabledBorders(); - void updatePadding(); - void updateFloating(); -@@ -363,6 +365,9 @@ - LengthMode m_lengthMode; - Plasma::Theme m_theme; - QTimer m_unhideTimer; -+ QTimer m_maskThrottleTimer; -+ bool m_pendingMaskUpdate = false; -+ bool m_forceMaskUpdate = false; - Plasma::Types::BackgroundHints m_backgroundHints; - KSvg::FrameSvg::EnabledBorders m_enabledBorders = KSvg::FrameSvg::AllBorders; - QPointer m_lastScreen; ---- a/shell/panelview.cpp 2026-04-08 06:33:10.000000000 -0300 -+++ b/shell/panelview.cpp 2026-07-02 13:39:01.337688294 -0300 -@@ -111,6 +111,10 @@ - m_strutsTimer.setSingleShot(true); - connect(&m_strutsTimer, &QTimer::timeout, this, &PanelView::updateExclusiveZone); - -+ m_maskThrottleTimer.setSingleShot(true); -+ m_maskThrottleTimer.setInterval(50ms); -+ connect(&m_maskThrottleTimer, &QTimer::timeout, this, &PanelView::applyPendingMaskUpdate); -+ - connect(m_corona, &Plasma::Corona::editModeChanged, this, &PanelView::updateEditModeLabel); - - // Register enums -@@ -1304,6 +1308,17 @@ - return; - } - -+ if (m_floatingnessAnimation.state() == QAbstractAnimation::Running && !m_forceMaskUpdate) { -+ m_pendingMaskUpdate = true; -+ if (!m_maskThrottleTimer.isActive()) { -+ m_maskThrottleTimer.start(); -+ } -+ return; -+ } -+ -+ m_forceMaskUpdate = false; -+ m_pendingMaskUpdate = false; -+ - // Popups now align to the mask, without it they appear in the wrong position - // always create it and show blur and contrast when needed - QRegion mask; -@@ -1364,6 +1379,14 @@ - } - } - -+void PanelView::applyPendingMaskUpdate() -+{ -+ if (m_pendingMaskUpdate) { -+ m_forceMaskUpdate = true; -+ updateMask(); -+ } -+} -+ - bool PanelView::canSetStrut() const - { - // read the wm name, need to do this every time which means a roundtrip unfortunately -@@ -1587,10 +1610,10 @@ - return; - } - m_floatingness = get(value); -- positionAndResizePanel(); -+ updateMask(); - }); - connect(&m_floatingnessAnimation, &QPropertyAnimation::finished, rootObject, [this]() { -- updateMask(); -+ positionAndResizePanel(); - }); - connect(rootObject, SIGNAL(minPanelHeightChanged()), this, SLOT(updatePadding())); - connect(rootObject, SIGNAL(minPanelWidthChanged()), this, SLOT(updatePadding())); diff --git a/sonic-workspace/sonic-workspace-6.6.4-x11-panel-lag.patch b/sonic-workspace/sonic-workspace-6.6.4-x11-panel-lag.patch new file mode 100644 index 0000000..57b16bf --- /dev/null +++ b/sonic-workspace/sonic-workspace-6.6.4-x11-panel-lag.patch @@ -0,0 +1,42 @@ +From: Anders da Silva Rytter Hansen +Date: Thu, 2 Jul 2026 09:40:00 -0300 +Subject: [PATCH] shell: handle zero-duration floating panel animation + +The QML side now disables the floating panel animation by setting +floatingnessAnimationDuration to 0. With a zero-duration +QPropertyAnimation the valueChanged signal may not be emitted, so update +m_floatingness and the QML property synchronously before doing the +geometry/mask/strut updates. + +References: https://bugs.kde.org/show_bug.cgi?id=484501 and https://github.com/orgs/Sonic-DE/discussions/20 +--- + shell/panelview.cpp | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/shell/panelview.cpp b/shell/panelview.cpp +--- a/shell/panelview.cpp ++++ b/shell/panelview.cpp +@@ -1782,6 +1782,13 @@ void PanelView::updateFloating() + m_topFloatingPadding = rootObject()->property("fixedTopFloatingPadding").toInt(); + m_bottomFloatingPadding = rootObject()->property("fixedBottomFloatingPadding").toInt(); + ++ const bool instantAnimation = m_floatingnessAnimation.duration() == 0; ++ if (instantAnimation) { ++ // Skip the animation; jump straight to the target value. ++ m_floatingness = m_floatingnessAnimation.endValue().toDouble(); ++ rootObject()->setProperty("floatingness", m_floatingness); ++ } ++ + positionAndResizePanel(); + updateExclusiveZone(); + updateShadows(); +@@ -1789,6 +1796,10 @@ void PanelView::updateFloating() + // positionPanel and updateMask are called by m_floatingnessAnimation + if (m_floatingnessAnimation.targetObject()) { ++ if (instantAnimation) { ++ updateMask(); ++ return; ++ } + m_floatingnessAnimation.start(); + } + } diff --git a/sonic-workspace/sonic-workspace.spec b/sonic-workspace/sonic-workspace.spec index 8413b1b..96620ef 100644 --- a/sonic-workspace/sonic-workspace.spec +++ b/sonic-workspace/sonic-workspace.spec @@ -7,7 +7,7 @@ Name: sonic-workspace Summary: Plasma workspace, applications and applets Version: 6.6.4 -Release: 15%{?dist} +Release: 14%{?dist} # Automatically converted from old format: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT - review is highly recommended. License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT @@ -37,7 +37,6 @@ Source40: ssh-agent.conf Source41: spice-vdagent.conf ## upstream patches -Patch0: sonic-workspace-6.6.4-mask-throttle.patch ## upstreamable Patches @@ -47,6 +46,10 @@ Patch106: plasma-workspace-5.27.80-enable-open-terminal-action.patch # default to enable the lock/logout actions Patch107: plasma-workspace-5.27.80-enable-lock-logout-action.patch +# Handle zero-duration floating panel animation now that the QML side disables +# the animation entirely. +Patch108: sonic-workspace-6.6.4-x11-panel-lag.patch + # udev BuildRequires: zlib-devel BuildRequires: libGL-devel @@ -691,11 +694,6 @@ fi %changelog -* Thu Jul 02 2026 Anders da Silva Rytter Hansen - 6.6.4-15 -- Reduce per-frame compositor work during panel floating animation: - throttle blur/contrast mask updates and avoid setGeometry/slideWindow - calls on every animation frame. - * Thu Jul 02 2026 Anders da Silva Rytter Hansen - 6.6.4-14 - Handle zero-duration floating panel animation so the panel can switch states instantly without stutter. From 565872646c18e43aebc912add806e92e4c27308b Mon Sep 17 00:00:00 2001 From: Anders da Silva Rytter Hansen Date: Sat, 4 Jul 2026 09:58:42 -0300 Subject: [PATCH 3/4] Revert "Fix UI lag when switching virtual desktop" This reverts commit 9a7eaaae1c3fae8940e2808031e750a6a89cf1ac. --- ...esktop-interface-6.6.4-x11-panel-lag.patch | 39 ----------------- .../sonic-desktop-interface.spec | 11 +---- .../sonic-workspace-6.6.4-x11-panel-lag.patch | 42 ------------------- sonic-workspace/sonic-workspace.spec | 10 +---- 4 files changed, 2 insertions(+), 100 deletions(-) delete mode 100644 sonic-desktop-interface/sonic-desktop-interface-6.6.4-x11-panel-lag.patch delete mode 100644 sonic-workspace/sonic-workspace-6.6.4-x11-panel-lag.patch diff --git a/sonic-desktop-interface/sonic-desktop-interface-6.6.4-x11-panel-lag.patch b/sonic-desktop-interface/sonic-desktop-interface-6.6.4-x11-panel-lag.patch deleted file mode 100644 index 9f5dc0b..0000000 --- a/sonic-desktop-interface/sonic-desktop-interface-6.6.4-x11-panel-lag.patch +++ /dev/null @@ -1,39 +0,0 @@ -From: Anders da Silva Rytter Hansen -Date: Thu, 2 Jul 2026 10:47:00 -0300 -Subject: [PATCH] desktoppackage: disable panel floating/opacity animations - -Disable the floating and opacity transitions so the panel changes state instantly and stays fluid. -This fixes the UI lag, when switching virtual desktops. - -References: https://bugs.kde.org/show_bug.cgi?id=484501 and https://github.com/orgs/Sonic-DE/discussions/20 ---- - desktoppackage/contents/views/Panel.qml | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/desktoppackage/contents/views/Panel.qml b/desktoppackage/contents/views/Panel.qml ---- a/desktoppackage/contents/views/Panel.qml -+++ b/desktoppackage/contents/views/Panel.qml -@@ -133,19 +133,15 @@ - } - - // Floatingness is a value in [0, 1] that's multiplied to the floating margin; 0: not floating, 1: floating, between 0 and 1: animation between the two states -- readonly property int floatingnessAnimationDuration: Kirigami.Units.longDuration -+ // Disable the panel geometry animation: animated resizes of the panel -+ // window cause synchronous compositor work that stalls the desktop during -+ // virtual-desktop switches. -+ readonly property int floatingnessAnimationDuration: 0 - property double floatingnessTarget: 0.0 // The animation is handled in panelview.cpp for efficiency - property double floatingness: 0.0 - - // PanelOpacity is a value in [0, 1] that's used as the opacity of the opaque elements over the transparent ones; values between 0 and 1 are used for animations - property double panelOpacity -- Behavior on panelOpacity { -- NumberAnimation { -- duration: Kirigami.Units.longDuration -- easing.type: Easing.OutCubic -- } -- } -- - KSvg.FrameSvgItem { - id: translucentItem - visible: root.floatingness === 0 && root.panelOpacity !== 1 diff --git a/sonic-desktop-interface/sonic-desktop-interface.spec b/sonic-desktop-interface/sonic-desktop-interface.spec index 34a5dcb..90bf202 100644 --- a/sonic-desktop-interface/sonic-desktop-interface.spec +++ b/sonic-desktop-interface/sonic-desktop-interface.spec @@ -11,7 +11,7 @@ Name: sonic-desktop-interface Summary: Plasma Desktop shell Version: 6.6.4 -Release: 12%{?dist} +Release: 11%{?dist} License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) #URL: https://invent.kde.org/plasma/%{name} @@ -35,11 +35,6 @@ Source20: breeze-fedora-0.3.tar.gz # Do not remove this as it breaks Fedora's QA policy Patch101: hide-virtual-keyboard-indicator-on-sddm.patch -# Disable panel floating/opacity animations. Animated panel resizes cause -# synchronous compositor work that stalls the desktop when switching virtual -# desktops, so make the panel state changes instant instead. -Patch102: sonic-desktop-interface-6.6.4-x11-panel-lag.patch - ## upstreamable patches BuildRequires: pkgconfig(libusb) @@ -398,10 +393,6 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/kaccess.desktop %changelog -* Thu Jul 02 2026 Anders da Silva Rytter Hansen - 6.6.4-12 -- Disable panel floating/opacity animations to avoid stutter when the panel - changes state (e.g. switching virtual desktops). - * Fri Apr 10 2026 Steve Cossette - 6.6.4-1 - 6.6.4 diff --git a/sonic-workspace/sonic-workspace-6.6.4-x11-panel-lag.patch b/sonic-workspace/sonic-workspace-6.6.4-x11-panel-lag.patch deleted file mode 100644 index 57b16bf..0000000 --- a/sonic-workspace/sonic-workspace-6.6.4-x11-panel-lag.patch +++ /dev/null @@ -1,42 +0,0 @@ -From: Anders da Silva Rytter Hansen -Date: Thu, 2 Jul 2026 09:40:00 -0300 -Subject: [PATCH] shell: handle zero-duration floating panel animation - -The QML side now disables the floating panel animation by setting -floatingnessAnimationDuration to 0. With a zero-duration -QPropertyAnimation the valueChanged signal may not be emitted, so update -m_floatingness and the QML property synchronously before doing the -geometry/mask/strut updates. - -References: https://bugs.kde.org/show_bug.cgi?id=484501 and https://github.com/orgs/Sonic-DE/discussions/20 ---- - shell/panelview.cpp | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/shell/panelview.cpp b/shell/panelview.cpp ---- a/shell/panelview.cpp -+++ b/shell/panelview.cpp -@@ -1782,6 +1782,13 @@ void PanelView::updateFloating() - m_topFloatingPadding = rootObject()->property("fixedTopFloatingPadding").toInt(); - m_bottomFloatingPadding = rootObject()->property("fixedBottomFloatingPadding").toInt(); - -+ const bool instantAnimation = m_floatingnessAnimation.duration() == 0; -+ if (instantAnimation) { -+ // Skip the animation; jump straight to the target value. -+ m_floatingness = m_floatingnessAnimation.endValue().toDouble(); -+ rootObject()->setProperty("floatingness", m_floatingness); -+ } -+ - positionAndResizePanel(); - updateExclusiveZone(); - updateShadows(); -@@ -1789,6 +1796,10 @@ void PanelView::updateFloating() - // positionPanel and updateMask are called by m_floatingnessAnimation - if (m_floatingnessAnimation.targetObject()) { -+ if (instantAnimation) { -+ updateMask(); -+ return; -+ } - m_floatingnessAnimation.start(); - } - } diff --git a/sonic-workspace/sonic-workspace.spec b/sonic-workspace/sonic-workspace.spec index 96620ef..935c9d6 100644 --- a/sonic-workspace/sonic-workspace.spec +++ b/sonic-workspace/sonic-workspace.spec @@ -7,7 +7,7 @@ Name: sonic-workspace Summary: Plasma workspace, applications and applets Version: 6.6.4 -Release: 14%{?dist} +Release: 13%{?dist} # Automatically converted from old format: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT - review is highly recommended. License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT @@ -46,10 +46,6 @@ Patch106: plasma-workspace-5.27.80-enable-open-terminal-action.patch # default to enable the lock/logout actions Patch107: plasma-workspace-5.27.80-enable-lock-logout-action.patch -# Handle zero-duration floating panel animation now that the QML side disables -# the animation entirely. -Patch108: sonic-workspace-6.6.4-x11-panel-lag.patch - # udev BuildRequires: zlib-devel BuildRequires: libGL-devel @@ -694,10 +690,6 @@ fi %changelog -* Thu Jul 02 2026 Anders da Silva Rytter Hansen - 6.6.4-14 -- Handle zero-duration floating panel animation so the panel can switch states - instantly without stutter. - * Fri Apr 10 2026 Steve Cossette - 6.6.4-1 - 6.6.4 From 49c8c3d2ce25e535b95ee98596bd49a3bb13839b Mon Sep 17 00:00:00 2001 From: Anders da Silva Rytter Hansen Date: Sat, 4 Jul 2026 10:01:37 -0300 Subject: [PATCH 4/4] bump versions move new patches back to testing --- sonic-desktop-interface/sonic-desktop-interface.spec | 2 +- sonic-win/sonic-win.spec | 2 +- sonic-workspace/sonic-workspace.spec | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sonic-desktop-interface/sonic-desktop-interface.spec b/sonic-desktop-interface/sonic-desktop-interface.spec index 90bf202..9a15f15 100644 --- a/sonic-desktop-interface/sonic-desktop-interface.spec +++ b/sonic-desktop-interface/sonic-desktop-interface.spec @@ -11,7 +11,7 @@ Name: sonic-desktop-interface Summary: Plasma Desktop shell Version: 6.6.4 -Release: 11%{?dist} +Release: 13%{?dist} License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) #URL: https://invent.kde.org/plasma/%{name} diff --git a/sonic-win/sonic-win.spec b/sonic-win/sonic-win.spec index 6050e59..b98b452 100644 --- a/sonic-win/sonic-win.spec +++ b/sonic-win/sonic-win.spec @@ -4,7 +4,7 @@ Name: sonic-win Version: 6.6.4 -Release: 11%{?dist} +Release: 13%{?dist} Summary: KDE Window manager License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND GPL-3.0-or-later AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT diff --git a/sonic-workspace/sonic-workspace.spec b/sonic-workspace/sonic-workspace.spec index 935c9d6..d3704f9 100644 --- a/sonic-workspace/sonic-workspace.spec +++ b/sonic-workspace/sonic-workspace.spec @@ -7,7 +7,7 @@ Name: sonic-workspace Summary: Plasma workspace, applications and applets Version: 6.6.4 -Release: 13%{?dist} +Release: 16%{?dist} # Automatically converted from old format: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT - review is highly recommended. License: BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND MIT