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;