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 + + +