[FindMyMouse]Add Win+Ctrl double press option (#32802)

* [FindMyMouse] Add Win+Ctrl double press option

* use includeWinKey default const in SuperSonar

* Add some comments regarding the bitmask

* Fix XAML style
This commit is contained in:
Nick
2024-06-03 07:44:11 -04:00
committed by GitHub
parent c00f37c8d7
commit c2b6dceb18
8 changed files with 69 additions and 11 deletions

View File

@@ -3,20 +3,20 @@
// See the LICENSE file in the project root for more information.
using System;
using System.Globalization;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Data;
namespace Microsoft.PowerToys.Settings.UI.Converters
{
public sealed class FindMyMouseActivationIntToVisibilityConverter : IValueConverter
public sealed class IndexBitFieldToVisibilityConverter : IValueConverter
{
// Receives a hexadecimal bit mask as a parameter. Will check the value against that bitmask.
public object Convert(object value, Type targetType, object parameter, string language)
{
var selectedActivation = (int)value;
var expectedActivation = int.Parse(parameter as string, CultureInfo.InvariantCulture);
var currentIndexBit = 1 << (int)value;
var selectedIndicesBitField = System.Convert.ToUInt32(parameter as string, 16);
return selectedActivation == expectedActivation ? Visibility.Visible : Visibility.Collapsed;
return (selectedIndicesBitField & currentIndexBit) == 0 ? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)

View File

@@ -12,7 +12,7 @@
AutomationProperties.LandmarkType="Main"
mc:Ignorable="d">
<Page.Resources>
<converters:FindMyMouseActivationIntToVisibilityConverter x:Key="FindMyMouseActivationIntToVisibilityConverter" />
<converters:IndexBitFieldToVisibilityConverter x:Key="IndexBitFieldToVisibilityConverter" />
<tkconverters:BoolToVisibilityConverter
x:Key="BoolToInvertedVisibilityConverter"
FalseValue="Visible"
@@ -46,7 +46,12 @@
<ComboBoxItem x:Uid="MouseUtils_FindMyMouse_ActivationCustomizedShortcut" />
</ComboBox>
<tkcontrols:SettingsExpander.Items>
<tkcontrols:SettingsCard x:Uid="MouseUtils_FindMyMouse_ShakingMinimumDistance" Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource FindMyMouseActivationIntToVisibilityConverter}, Mode=OneWay, ConverterParameter=2}">
<tkcontrols:SettingsCard ContentAlignment="Left" Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource IndexBitFieldToVisibilityConverter}, Mode=OneWay, ConverterParameter=0x3}">
<!-- Visible for both Press Left Control twice and Press Right Control twice activation methods -->
<CheckBox x:Uid="MouseUtils_Include_Win_Key" IsChecked="{x:Bind ViewModel.FindMyMouseIncludeWinKey, Mode=TwoWay}" />
</tkcontrols:SettingsCard>
<tkcontrols:SettingsCard x:Uid="MouseUtils_FindMyMouse_ShakingMinimumDistance" Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource IndexBitFieldToVisibilityConverter}, Mode=OneWay, ConverterParameter=0x4}">
<!-- Visible for the Shake Mouse activation method -->
<NumberBox
MinWidth="{StaticResource SettingActionControlMinWidth}"
LargeChange="1000"
@@ -56,7 +61,8 @@
SpinButtonPlacementMode="Compact"
Value="{x:Bind ViewModel.FindMyMouseShakingMinimumDistance, Mode=TwoWay}" />
</tkcontrols:SettingsCard>
<tkcontrols:SettingsCard x:Uid="MouseUtils_FindMyMouse_ShakingIntervalMs" Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource FindMyMouseActivationIntToVisibilityConverter}, Mode=OneWay, ConverterParameter=2}">
<tkcontrols:SettingsCard x:Uid="MouseUtils_FindMyMouse_ShakingIntervalMs" Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource IndexBitFieldToVisibilityConverter}, Mode=OneWay, ConverterParameter=0x4}">
<!-- Visible for the Shake Mouse activation method -->
<NumberBox
MinWidth="{StaticResource SettingActionControlMinWidth}"
LargeChange="1000"
@@ -66,7 +72,8 @@
SpinButtonPlacementMode="Compact"
Value="{x:Bind ViewModel.FindMyMouseShakingIntervalMs, Mode=TwoWay}" />
</tkcontrols:SettingsCard>
<tkcontrols:SettingsCard x:Uid="MouseUtils_FindMyMouse_ShakingFactor" Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource FindMyMouseActivationIntToVisibilityConverter}, Mode=OneWay, ConverterParameter=2}">
<tkcontrols:SettingsCard x:Uid="MouseUtils_FindMyMouse_ShakingFactor" Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource IndexBitFieldToVisibilityConverter}, Mode=OneWay, ConverterParameter=0x4}">
<!-- Visible for the Shake Mouse activation method -->
<NumberBox
MinWidth="{StaticResource SettingActionControlMinWidth}"
LargeChange="100"
@@ -79,7 +86,8 @@
<tkcontrols:SettingsCard
x:Uid="MouseUtils_FindMyMouse_ActivationShortcut"
HeaderIcon="{ui:FontIcon Glyph=&#xEDA7;}"
Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource FindMyMouseActivationIntToVisibilityConverter}, Mode=OneWay, ConverterParameter=3}">
Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource IndexBitFieldToVisibilityConverter}, Mode=OneWay, ConverterParameter=0x8}">
<!-- Visible for the Shortcut activation method -->
<controls:ShortcutControl MinWidth="{StaticResource SettingActionControlMinWidth}" HotkeySettings="{x:Bind Path=ViewModel.FindMyMouseActivationShortcut, Mode=TwoWay}" />
</tkcontrols:SettingsCard>
<tkcontrols:SettingsCard ContentAlignment="Left">

View File

@@ -2664,6 +2664,10 @@ Right-click to remove the key combination, thereby deactivating the shortcut.</v
<value>Shake mouse</value>
<comment>Mouse is the hardware peripheral.</comment>
</data>
<data name="MouseUtils_Include_Win_Key.Content" xml:space="preserve">
<value>Only activate while holding the Windows key</value>
<comment>Specifies that the 'Find My Mouse' will only activate if the Windows key is held down while pressing the Ctrl key twice.</comment>
</data>
<data name="MouseUtils_FindMyMouse_ExcludedApps.Description" xml:space="preserve">
<value>Prevents module activation when an excluded application is the foreground application</value>
</data>

View File

@@ -44,6 +44,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
FindMyMouseSettingsConfig = findMyMouseSettingsRepository.SettingsConfig;
_findMyMouseActivationMethod = FindMyMouseSettingsConfig.Properties.ActivationMethod.Value < 4 ? FindMyMouseSettingsConfig.Properties.ActivationMethod.Value : 0;
_findMyMouseIncludeWinKey = FindMyMouseSettingsConfig.Properties.IncludeWinKey.Value;
_findMyMouseDoNotActivateOnGameMode = FindMyMouseSettingsConfig.Properties.DoNotActivateOnGameMode.Value;
string backgroundColor = FindMyMouseSettingsConfig.Properties.BackgroundColor.Value;
@@ -210,6 +211,24 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
}
}
public bool FindMyMouseIncludeWinKey
{
get
{
return _findMyMouseIncludeWinKey;
}
set
{
if (_findMyMouseIncludeWinKey != value)
{
_findMyMouseIncludeWinKey = value;
FindMyMouseSettingsConfig.Properties.IncludeWinKey.Value = value;
NotifyFindMyMousePropertyChanged();
}
}
}
public HotkeySettings FindMyMouseActivationShortcut
{
get
@@ -973,6 +992,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
private bool _findMyMouseEnabledStateIsGPOConfigured;
private bool _isFindMyMouseEnabled;
private int _findMyMouseActivationMethod;
private bool _findMyMouseIncludeWinKey;
private bool _findMyMouseDoNotActivateOnGameMode;
private string _findMyMouseBackgroundColor;
private string _findMyMouseSpotlightColor;