diff --git a/kwin/src/breezydesktopconfig.kcfg b/kwin/src/breezydesktopconfig.kcfg
index bb27f0c..0003e2d 100644
--- a/kwin/src/breezydesktopconfig.kcfg
+++ b/kwin/src/breezydesktopconfig.kcfg
@@ -81,5 +81,10 @@
Override the default look ahead time in milliseconds (-1 to use default)
+
+ false
+
+ Apply follow mode to all displays instead of only the focused display
+
diff --git a/kwin/src/breezydesktopeffect.cpp b/kwin/src/breezydesktopeffect.cpp
index 4b0747c..dfd23d2 100644
--- a/kwin/src/breezydesktopeffect.cpp
+++ b/kwin/src/breezydesktopeffect.cpp
@@ -228,6 +228,9 @@ void BreezyDesktopEffect::reconfigure(ReconfigureFlags)
if (m_antialiasingQuality != aaQuality) { m_antialiasingQuality = aaQuality; Q_EMIT antialiasingQualityChanged(); }
if (m_removeVirtualDisplaysOnDisable != removeVD) { m_removeVirtualDisplaysOnDisable = removeVD; Q_EMIT removeVirtualDisplaysOnDisableChanged(); }
if (m_mirrorPhysicalDisplays != mirrorPhysicalDisplays) { m_mirrorPhysicalDisplays = mirrorPhysicalDisplays; Q_EMIT mirrorPhysicalDisplaysChanged(); }
+
+ // this one doesn't have a signal, just always assign it
+ m_allDisplaysFollowMode = BreezyDesktopConfig::allDisplaysFollowMode();
}
QVariantMap BreezyDesktopEffect::initialProperties(Output *screen)
@@ -507,7 +510,8 @@ QList BreezyDesktopEffect::smoothFollowOrigin() const {
}
bool BreezyDesktopEffect::smoothFollowEnabled() const {
- return m_smoothFollowEnabled;
+ // the effect doesn't need to know about smooth follow if it's in "all displays" mode
+ return m_focusedSmoothFollowEnabled;
}
bool BreezyDesktopEffect::checkParityByte(const char* data) {
@@ -673,14 +677,21 @@ void BreezyDesktopEffect::updateImuRotation() {
uint8_t smoothFollowEnabled = false;
memcpy(&smoothFollowEnabled, data + DataView::SMOOTH_FOLLOW_ENABLED[DataView::OFFSET_INDEX], sizeof(smoothFollowEnabled));
bool nextSmoothFollowEnabled = (smoothFollowEnabled != 0);
- if (m_smoothFollowEnabled != nextSmoothFollowEnabled) {
+ bool focusedSmoothFollowEnabled = nextSmoothFollowEnabled && !m_allDisplaysFollowMode;
+ if (m_smoothFollowEnabled != nextSmoothFollowEnabled || m_focusedSmoothFollowEnabled != focusedSmoothFollowEnabled) {
m_smoothFollowEnabled = nextSmoothFollowEnabled;
- Q_EMIT smoothFollowEnabledChanged();
- if (nextSmoothFollowEnabled) updateDriverSmoothFollowSettings();
+ if (m_focusedSmoothFollowEnabled != focusedSmoothFollowEnabled) {
+ m_focusedSmoothFollowEnabled = focusedSmoothFollowEnabled;
+
+ // only emit the signal if it affects the effect
+ Q_EMIT smoothFollowEnabledChanged();
+ }
+
+ if (m_smoothFollowEnabled) updateDriverSmoothFollowSettings();
} else if (enabled && !wasEnabled) {
Q_EMIT smoothFollowEnabledChanged();
- if (nextSmoothFollowEnabled) updateDriverSmoothFollowSettings();
+ if (m_smoothFollowEnabled) updateDriverSmoothFollowSettings();
}
}
diff --git a/kwin/src/breezydesktopeffect.h b/kwin/src/breezydesktopeffect.h
index c5edd3d..049e453 100644
--- a/kwin/src/breezydesktopeffect.h
+++ b/kwin/src/breezydesktopeffect.h
@@ -168,6 +168,8 @@ namespace KWin
bool m_removeVirtualDisplaysOnDisable = true;
bool m_mirrorPhysicalDisplays = false;
float m_smoothFollowThreshold = 1.0f;
+ bool m_allDisplaysFollowMode = false;
+ bool m_focusedSmoothFollowEnabled = false;
struct VirtualOutputInfo {
Output *output = nullptr;
diff --git a/kwin/src/kcm/breezydesktopeffectkcm.cpp b/kwin/src/kcm/breezydesktopeffectkcm.cpp
index 06ddaa5..6c44371 100644
--- a/kwin/src/kcm/breezydesktopeffectkcm.cpp
+++ b/kwin/src/kcm/breezydesktopeffectkcm.cpp
@@ -124,6 +124,7 @@ BreezyDesktopEffectConfig::BreezyDesktopEffectConfig(QObject *parent, const KPlu
connect(ui.kcfg_AntialiasingQuality, qOverload(&QComboBox::currentIndexChanged), this, &BreezyDesktopEffectConfig::save);
connect(ui.kcfg_MirrorPhysicalDisplays, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::save);
connect(ui.kcfg_RemoveVirtualDisplaysOnDisable, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::save);
+ connect(ui.kcfg_AllDisplaysFollowMode, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::save);
connect(ui.EnableMultitap, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateMultitapEnabled);
connect(ui.SmoothFollowTrackYaw, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateSmoothFollowTrackYaw);
connect(ui.SmoothFollowTrackPitch, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateSmoothFollowTrackPitch);
@@ -257,6 +258,7 @@ void BreezyDesktopEffectConfig::updateUiFromConfig()
ui.kcfg_AntialiasingQuality->setCurrentIndex(BreezyDesktopConfig::self()->antialiasingQuality());
ui.kcfg_MirrorPhysicalDisplays->setChecked(BreezyDesktopConfig::self()->mirrorPhysicalDisplays());
ui.kcfg_RemoveVirtualDisplaysOnDisable->setChecked(BreezyDesktopConfig::self()->removeVirtualDisplaysOnDisable());
+ ui.kcfg_AllDisplaysFollowMode->setChecked(BreezyDesktopConfig::self()->allDisplaysFollowMode());
ui.kcfg_ZoomOnFocusEnabled->setChecked(BreezyDesktopConfig::self()->zoomOnFocusEnabled());
ui.kcfg_FocusedDisplayDistance->setEnabled(ui.kcfg_ZoomOnFocusEnabled->isChecked());
ui.kcfg_SmoothFollowThreshold->setValue(BreezyDesktopConfig::self()->smoothFollowThreshold());
diff --git a/kwin/src/kcm/breezydesktopeffectkcm.ui b/kwin/src/kcm/breezydesktopeffectkcm.ui
index 4459f13..74a2b1d 100644
--- a/kwin/src/kcm/breezydesktopeffectkcm.ui
+++ b/kwin/src/kcm/breezydesktopeffectkcm.ui
@@ -371,6 +371,16 @@
+ -
+
+
+ All displays follow mode
+
+
+ false
+
+
+
-