From 61aa0a1f79e312cd0ba220a002c6c81868ad8c5b Mon Sep 17 00:00:00 2001 From: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com> Date: Tue, 25 Jul 2023 16:48:59 +0200 Subject: [PATCH] [FancyZones] Add setting to use mouse middle-click to toggle multiple zones spanning (#27603) --- .../FancyZonesLib/DraggingState.cpp | 9 ++++++--- .../fancyzones/FancyZonesLib/Settings.cpp | 2 ++ .../fancyzones/FancyZonesLib/Settings.h | 1 + .../FancyZonesLib/SettingsConstants.h | 1 + .../Settings.UI.Library/FZConfigProperties.cs | 4 ++++ .../SettingsXAML/Views/FancyZonesPage.xaml | 5 +++++ .../Settings.UI/Strings/en-us/Resources.resw | 3 +++ .../ViewModels/FancyZonesViewModel.cs | 20 +++++++++++++++++++ 8 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/modules/fancyzones/FancyZonesLib/DraggingState.cpp b/src/modules/fancyzones/FancyZonesLib/DraggingState.cpp index 897b534600..50aeb3f6fe 100644 --- a/src/modules/fancyzones/FancyZonesLib/DraggingState.cpp +++ b/src/modules/fancyzones/FancyZonesLib/DraggingState.cpp @@ -76,12 +76,15 @@ void DraggingState::OnSecondaryMouseDown() void DraggingState::OnMiddleMouseDown() { - if (!this->IsDragging()) + if (FancyZonesSettings::settings().mouseMiddleClickSpanningMultipleZones) { - return; + m_middleMouseState = !m_middleMouseState; + } + else + { + m_secondaryMouseState = !m_secondaryMouseState; } - m_middleMouseState = !m_middleMouseState; m_keyUpdateCallback(); } diff --git a/src/modules/fancyzones/FancyZonesLib/Settings.cpp b/src/modules/fancyzones/FancyZonesLib/Settings.cpp index 4f7e9cf463..865c1c1893 100644 --- a/src/modules/fancyzones/FancyZonesLib/Settings.cpp +++ b/src/modules/fancyzones/FancyZonesLib/Settings.cpp @@ -17,6 +17,7 @@ namespace NonLocalizable // FancyZones settings descriptions are localized, but underlying toggle (spinner, color picker) names are not. const wchar_t ShiftDragID[] = L"fancyzones_shiftDrag"; const wchar_t MouseSwitchID[] = L"fancyzones_mouseSwitch"; + const wchar_t MouseMiddleClickSpanningMultipleZonesID[] = L"fancyzones_mouseMiddleClickSpanningMultipleZones"; const wchar_t OverrideSnapHotKeysID[] = L"fancyzones_overrideSnapHotkeys"; const wchar_t MoveWindowAcrossMonitorsID[] = L"fancyzones_moveWindowAcrossMonitors"; const wchar_t MoveWindowsBasedOnPositionID[] = L"fancyzones_moveWindowsBasedOnPosition"; @@ -108,6 +109,7 @@ void FancyZonesSettings::LoadSettings() // flags SetBoolFlag(values, NonLocalizable::ShiftDragID, SettingId::ShiftDrag, m_settings.shiftDrag); SetBoolFlag(values, NonLocalizable::MouseSwitchID, SettingId::MouseSwitch, m_settings.mouseSwitch); + SetBoolFlag(values, NonLocalizable::MouseMiddleClickSpanningMultipleZonesID, SettingId::MouseMiddleClickSpanningMultipleZones, m_settings.mouseMiddleClickSpanningMultipleZones); SetBoolFlag(values, NonLocalizable::OverrideSnapHotKeysID, SettingId::OverrideSnapHotkeys, m_settings.overrideSnapHotkeys); SetBoolFlag(values, NonLocalizable::MoveWindowAcrossMonitorsID, SettingId::MoveWindowAcrossMonitors, m_settings.moveWindowAcrossMonitors); SetBoolFlag(values, NonLocalizable::MoveWindowsBasedOnPositionID, SettingId::MoveWindowsBasedOnPosition, m_settings.moveWindowsBasedOnPosition); diff --git a/src/modules/fancyzones/FancyZonesLib/Settings.h b/src/modules/fancyzones/FancyZonesLib/Settings.h index 10cdafd17c..8c1789a6b9 100644 --- a/src/modules/fancyzones/FancyZonesLib/Settings.h +++ b/src/modules/fancyzones/FancyZonesLib/Settings.h @@ -26,6 +26,7 @@ struct Settings // The values specified here are the defaults. bool shiftDrag = true; bool mouseSwitch = false; + bool mouseMiddleClickSpanningMultipleZones = false; bool displayChange_moveWindows = false; bool zoneSetChange_flashZones = false; bool zoneSetChange_moveWindows = false; diff --git a/src/modules/fancyzones/FancyZonesLib/SettingsConstants.h b/src/modules/fancyzones/FancyZonesLib/SettingsConstants.h index 08e01efee7..1797d60116 100644 --- a/src/modules/fancyzones/FancyZonesLib/SettingsConstants.h +++ b/src/modules/fancyzones/FancyZonesLib/SettingsConstants.h @@ -4,6 +4,7 @@ enum class SettingId { ShiftDrag = 0, MouseSwitch, + MouseMiddleClickSpanningMultipleZones, OverrideSnapHotkeys, MoveWindowAcrossMonitors, MoveWindowsBasedOnPosition, diff --git a/src/settings-ui/Settings.UI.Library/FZConfigProperties.cs b/src/settings-ui/Settings.UI.Library/FZConfigProperties.cs index 8a8ae9f303..f64ee5fc12 100644 --- a/src/settings-ui/Settings.UI.Library/FZConfigProperties.cs +++ b/src/settings-ui/Settings.UI.Library/FZConfigProperties.cs @@ -23,6 +23,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library FancyzonesShiftDrag = new BoolProperty(ConfigDefaults.DefaultFancyzonesShiftDrag); FancyzonesOverrideSnapHotkeys = new BoolProperty(); FancyzonesMouseSwitch = new BoolProperty(); + FancyzonesMouseMiddleClickSpanningMultipleZones = new BoolProperty(); FancyzonesMoveWindowsAcrossMonitors = new BoolProperty(); FancyzonesMoveWindowsBasedOnPosition = new BoolProperty(); FancyzonesOverlappingZonesAlgorithm = new IntProperty(); @@ -60,6 +61,9 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonPropertyName("fancyzones_mouseSwitch")] public BoolProperty FancyzonesMouseSwitch { get; set; } + [JsonPropertyName("fancyzones_mouseMiddleClickSpanningMultipleZones")] + public BoolProperty FancyzonesMouseMiddleClickSpanningMultipleZones { get; set; } + [JsonPropertyName("fancyzones_overrideSnapHotkeys")] public BoolProperty FancyzonesOverrideSnapHotkeys { get; set; } diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml index 181c1baffa..5ac5c7ffd6 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml @@ -81,6 +81,11 @@ x:Uid="FancyZones_MouseDragCheckBoxControl_Header" IsChecked="{x:Bind Mode=TwoWay, Path=ViewModel.MouseSwitch}" /> + + + Use a non-primary mouse button to toggle zone activation + + Use middle-click mouse button to toggle multiple zones spanning + Move windows between zones across all monitors diff --git a/src/settings-ui/Settings.UI/ViewModels/FancyZonesViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/FancyZonesViewModel.cs index b385eb23dc..358fbc97a4 100644 --- a/src/settings-ui/Settings.UI/ViewModels/FancyZonesViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/FancyZonesViewModel.cs @@ -74,6 +74,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels _shiftDrag = Settings.Properties.FancyzonesShiftDrag.Value; _mouseSwitch = Settings.Properties.FancyzonesMouseSwitch.Value; + _mouseMiddleButtonSpanningMultipleZones = Settings.Properties.FancyzonesMouseMiddleClickSpanningMultipleZones.Value; _overrideSnapHotkeys = Settings.Properties.FancyzonesOverrideSnapHotkeys.Value; _moveWindowsAcrossMonitors = Settings.Properties.FancyzonesMoveWindowsAcrossMonitors.Value; _moveWindowBehaviour = Settings.Properties.FancyzonesMoveWindowsBasedOnPosition.Value ? MoveWindowBehaviour.MoveWindowBasedOnPosition : MoveWindowBehaviour.MoveWindowBasedOnZoneIndex; @@ -147,6 +148,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels private bool _isEnabled; private bool _shiftDrag; private bool _mouseSwitch; + private bool _mouseMiddleButtonSpanningMultipleZones; private bool _overrideSnapHotkeys; private bool _moveWindowsAcrossMonitors; private MoveWindowBehaviour _moveWindowBehaviour; @@ -276,6 +278,24 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels } } + public bool MouseMiddleClickSpanningMultipleZones + { + get + { + return _mouseMiddleButtonSpanningMultipleZones; + } + + set + { + if (value != _mouseMiddleButtonSpanningMultipleZones) + { + _mouseMiddleButtonSpanningMultipleZones = value; + Settings.Properties.FancyzonesMouseMiddleClickSpanningMultipleZones.Value = value; + NotifyPropertyChanged(); + } + } + } + public string GetSettingsSubPath() { return settingsConfigFileFolder + "\\" + ModuleName;