[FancyZones] Add setting to use mouse middle-click to toggle multiple zones spanning (#27603)

This commit is contained in:
Stefan Markovic
2023-07-25 16:48:59 +02:00
committed by GitHub
parent 5a48709dc8
commit 61aa0a1f79
8 changed files with 42 additions and 3 deletions

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -4,6 +4,7 @@ enum class SettingId
{
ShiftDrag = 0,
MouseSwitch,
MouseMiddleClickSpanningMultipleZones,
OverrideSnapHotkeys,
MoveWindowAcrossMonitors,
MoveWindowsBasedOnPosition,

View File

@@ -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; }

View File

@@ -81,6 +81,11 @@
x:Uid="FancyZones_MouseDragCheckBoxControl_Header"
IsChecked="{x:Bind Mode=TwoWay, Path=ViewModel.MouseSwitch}" />
</labs:SettingsCard>
<labs:SettingsCard ContentAlignment="Left">
<CheckBox
x:Uid="FancyZones_MouseMiddleClickSpanningMultipleZonesCheckBoxControl_Header"
IsChecked="{x:Bind Mode=TwoWay, Path=ViewModel.MouseMiddleClickSpanningMultipleZones}" />
</labs:SettingsCard>
<labs:SettingsCard ContentAlignment="Left">
<CheckBox
x:Uid="FancyZones_ShowZonesOnAllMonitorsCheckBoxControl"

View File

@@ -897,6 +897,9 @@
<data name="FancyZones_MouseDragCheckBoxControl_Header.Content" xml:space="preserve">
<value>Use a non-primary mouse button to toggle zone activation</value>
</data>
<data name="FancyZones_MouseMiddleClickSpanningMultipleZonesCheckBoxControl_Header.Content" xml:space="preserve">
<value>Use middle-click mouse button to toggle multiple zones spanning</value>
</data>
<data name="FancyZones_MoveWindowsAcrossAllMonitorsCheckBoxControl.Content" xml:space="preserve">
<value>Move windows between zones across all monitors</value>
</data>

View File

@@ -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;