From 67c70532fd67ef56197eaee437030b977f7e7b16 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Thu, 14 Aug 2025 20:53:19 -0700 Subject: [PATCH] Add real-time updating of display distances when the sliders are moved --- kwin/src/kcm/breezydesktopeffectkcm.cpp | 2 ++ kwin/src/qml/BreezyDesktop.qml | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/kwin/src/kcm/breezydesktopeffectkcm.cpp b/kwin/src/kcm/breezydesktopeffectkcm.cpp index 11d58f3..19b1e86 100644 --- a/kwin/src/kcm/breezydesktopeffectkcm.cpp +++ b/kwin/src/kcm/breezydesktopeffectkcm.cpp @@ -39,6 +39,8 @@ BreezyDesktopEffectConfig::BreezyDesktopEffectConfig(QObject *parent, const KPlu ui.shortcutsEditor->addCollection(actionCollection); connect(ui.shortcutsEditor, &KShortcutsEditor::keyChange, this, &BreezyDesktopEffectConfig::markAsChanged); + connect(ui.kcfg_FocusedDisplayDistance, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::save); + connect(ui.kcfg_AllDisplaysDistance, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::save); } BreezyDesktopEffectConfig::~BreezyDesktopEffectConfig() diff --git a/kwin/src/qml/BreezyDesktop.qml b/kwin/src/qml/BreezyDesktop.qml index 4081e91..56ef738 100644 --- a/kwin/src/qml/BreezyDesktop.qml +++ b/kwin/src/qml/BreezyDesktop.qml @@ -58,6 +58,7 @@ Node { screen: screens[index] monitorPlacement: monitorPlacements[index] property real monitorDistance: effect.allDisplaysDistance + property real targetDistance: effect.allDisplaysDistance property real screenRotationY: displays.radianToDegree(monitorPlacement.rotationAngleRadians.y) property real screenRotationX: displays.radianToDegree(monitorPlacement.rotationAngleRadians.x) @@ -102,24 +103,33 @@ Node { breezyDesktop.screens.map(screen => screen.geometry) ); + const focusedDisplay = focusedIndex !== -1 ? breezyDesktop.displayAtIndex(focusedIndex) : null; if (focusedIndex !== breezyDesktop.focusedMonitorIndex) { zoomOutAnimation.stop(); zoomInAnimation.stop(); zoomOnFocusSequence.stop(); - if (focusedIndex === -1) { + if (focusedDisplay === null) { zoomOutAnimation.target = breezyDesktop.displayAtIndex(breezyDesktop.focusedMonitorIndex); + zoomOutAnimation.target.targetDistance = zoomOutAnimation.to; zoomOutAnimation.start(); } else { if (breezyDesktop.focusedMonitorIndex === -1) { - zoomInAnimation.target = breezyDesktop.displayAtIndex(focusedIndex); + zoomInAnimation.target = focusedDisplay; + focusedDisplay.targetDistance = zoomInAnimation.to; zoomInAnimation.start(); } else { - zoomInSeqAnimation.target = breezyDesktop.displayAtIndex(focusedIndex); + zoomInSeqAnimation.target = focusedDisplay; + focusedDisplay.targetDistance = zoomInSeqAnimation.to; zoomOutSeqAnimation.target = breezyDesktop.displayAtIndex(breezyDesktop.focusedMonitorIndex); + zoomOutSeqAnimation.target.targetDistance = zoomOutSeqAnimation.to; zoomOnFocusSequence.start(); } } breezyDesktop.focusedMonitorIndex = focusedIndex; + } else if (focusedDisplay !== null && focusedDisplay.targetDistance !== effect.focusedDisplayDistance) { + // user is changing the focused display distance setting, so just move it to match + focusedDisplay.monitorDistance = effect.focusedDisplayDistance; + focusedDisplay.targetDistance = effect.focusedDisplayDistance; } } }