diff --git a/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.cpp b/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.cpp index 65bbb5ce5d..0b52e3b16f 100644 --- a/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.cpp +++ b/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.cpp @@ -534,6 +534,11 @@ int MouseHighlighterMain(HINSTANCE hInstance, MouseHighlighterSettings settings) } Logger::info("Initialized the highlighter instance."); + if (settings.autoActivate) + { + highlighter.SwitchActivationMode(); + } + MSG msg; // Main message loop: diff --git a/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.h b/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.h index 6ec069f7cc..6116b37ce6 100644 --- a/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.h +++ b/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.h @@ -7,6 +7,7 @@ const winrt::Windows::UI::Color MOUSE_HIGHLIGHTER_DEFAULT_ALWAYS_COLOR = winrt:: constexpr int MOUSE_HIGHLIGHTER_DEFAULT_RADIUS = 20; constexpr int MOUSE_HIGHLIGHTER_DEFAULT_DELAY_MS = 500; constexpr int MOUSE_HIGHLIGHTER_DEFAULT_DURATION_MS = 250; +constexpr bool MOUSE_HIGHLIGHTER_DEFAULT_AUTO_ACTIVATE = false; struct MouseHighlighterSettings { @@ -16,6 +17,7 @@ struct MouseHighlighterSettings int radius = MOUSE_HIGHLIGHTER_DEFAULT_RADIUS; int fadeDelayMs = MOUSE_HIGHLIGHTER_DEFAULT_DELAY_MS; int fadeDurationMs = MOUSE_HIGHLIGHTER_DEFAULT_DURATION_MS; + bool autoActivate = MOUSE_HIGHLIGHTER_DEFAULT_AUTO_ACTIVATE; }; int MouseHighlighterMain(HINSTANCE hinst, MouseHighlighterSettings settings); diff --git a/src/modules/MouseUtils/MouseHighlighter/dllmain.cpp b/src/modules/MouseUtils/MouseHighlighter/dllmain.cpp index ed259e2a54..867f99b3e6 100644 --- a/src/modules/MouseUtils/MouseHighlighter/dllmain.cpp +++ b/src/modules/MouseUtils/MouseHighlighter/dllmain.cpp @@ -17,6 +17,7 @@ namespace const wchar_t JSON_KEY_HIGHLIGHT_RADIUS[] = L"highlight_radius"; const wchar_t JSON_KEY_HIGHLIGHT_FADE_DELAY_MS[] = L"highlight_fade_delay_ms"; const wchar_t JSON_KEY_HIGHLIGHT_FADE_DURATION_MS[] = L"highlight_fade_duration_ms"; + const wchar_t JSON_KEY_AUTO_ACTIVATE[] = L"auto_activate"; } extern "C" IMAGE_DOS_HEADER __ImageBase; @@ -356,6 +357,16 @@ public: { Logger::warn("Failed to initialize Fade Duration from settings. Will use default value"); } + try + { + // Parse auto activate + auto jsonPropertiesObject = settingsObject.GetNamedObject(JSON_KEY_PROPERTIES).GetNamedObject(JSON_KEY_AUTO_ACTIVATE); + highlightSettings.autoActivate = jsonPropertiesObject.GetNamedBoolean(JSON_KEY_VALUE); + } + catch (...) + { + Logger::warn("Failed to initialize auto activate from settings. Will use default value"); + } } else { diff --git a/src/modules/MouseUtils/MousePointerCrosshairs/InclusiveCrosshairs.cpp b/src/modules/MouseUtils/MousePointerCrosshairs/InclusiveCrosshairs.cpp index 66b273e48c..18282499b8 100644 --- a/src/modules/MouseUtils/MousePointerCrosshairs/InclusiveCrosshairs.cpp +++ b/src/modules/MouseUtils/MousePointerCrosshairs/InclusiveCrosshairs.cpp @@ -548,6 +548,11 @@ int InclusiveCrosshairsMain(HINSTANCE hInstance, InclusiveCrosshairsSettings& se } Logger::info("Initialized the crosshairs instance."); + if (settings.autoActivate) + { + crosshairs.SwitchActivationMode(); + } + MSG msg; // Main message loop: diff --git a/src/modules/MouseUtils/MousePointerCrosshairs/InclusiveCrosshairs.h b/src/modules/MouseUtils/MousePointerCrosshairs/InclusiveCrosshairs.h index bf760dd5c0..43456a4326 100644 --- a/src/modules/MouseUtils/MousePointerCrosshairs/InclusiveCrosshairs.h +++ b/src/modules/MouseUtils/MousePointerCrosshairs/InclusiveCrosshairs.h @@ -10,6 +10,7 @@ constexpr int INCLUSIVE_MOUSE_DEFAULT_CROSSHAIRS_BORDER_SIZE = 1; constexpr bool INCLUSIVE_MOUSE_DEFAULT_AUTO_HIDE = false; constexpr bool INCLUSIVE_MOUSE_DEFAULT_CROSSHAIRS_IS_FIXED_LENGTH_ENABLED = false; constexpr int INCLUSIVE_MOUSE_DEFAULT_CROSSHAIRS_FIXED_LENGTH = 1; +constexpr bool INCLUSIVE_MOUSE_DEFAULT_AUTO_ACTIVATE = false; struct InclusiveCrosshairsSettings { @@ -22,6 +23,7 @@ struct InclusiveCrosshairsSettings bool crosshairsAutoHide = INCLUSIVE_MOUSE_DEFAULT_AUTO_HIDE; bool crosshairsIsFixedLengthEnabled = INCLUSIVE_MOUSE_DEFAULT_CROSSHAIRS_IS_FIXED_LENGTH_ENABLED; int crosshairsFixedLength = INCLUSIVE_MOUSE_DEFAULT_CROSSHAIRS_FIXED_LENGTH; + bool autoActivate = INCLUSIVE_MOUSE_DEFAULT_AUTO_ACTIVATE; }; int InclusiveCrosshairsMain(HINSTANCE hinst, InclusiveCrosshairsSettings& settings); diff --git a/src/modules/MouseUtils/MousePointerCrosshairs/dllmain.cpp b/src/modules/MouseUtils/MousePointerCrosshairs/dllmain.cpp index 60aa9c3bc4..65599d28f3 100644 --- a/src/modules/MouseUtils/MousePointerCrosshairs/dllmain.cpp +++ b/src/modules/MouseUtils/MousePointerCrosshairs/dllmain.cpp @@ -20,6 +20,7 @@ namespace const wchar_t JSON_KEY_CROSSHAIRS_AUTO_HIDE[] = L"crosshairs_auto_hide"; const wchar_t JSON_KEY_CROSSHAIRS_IS_FIXED_LENGTH_ENABLED[] = L"crosshairs_is_fixed_length_enabled"; const wchar_t JSON_KEY_CROSSHAIRS_FIXED_LENGTH[] = L"crosshairs_fixed_length"; + const wchar_t JSON_KEY_AUTO_ACTIVATE[] = L"auto_activate"; } extern "C" IMAGE_DOS_HEADER __ImageBase; @@ -337,7 +338,7 @@ public: { // Parse auto hide auto jsonPropertiesObject = settingsObject.GetNamedObject(JSON_KEY_PROPERTIES).GetNamedObject(JSON_KEY_CROSSHAIRS_AUTO_HIDE); - inclusiveCrosshairsSettings.crosshairsAutoHide = static_cast(jsonPropertiesObject.GetNamedBoolean(JSON_KEY_VALUE)); + inclusiveCrosshairsSettings.crosshairsAutoHide = jsonPropertiesObject.GetNamedBoolean(JSON_KEY_VALUE); } catch (...) { @@ -372,6 +373,16 @@ public: { Logger::warn("Failed to initialize fixed length from settings. Will use default value"); } + try + { + // Parse auto activate + auto jsonPropertiesObject = settingsObject.GetNamedObject(JSON_KEY_PROPERTIES).GetNamedObject(JSON_KEY_AUTO_ACTIVATE); + inclusiveCrosshairsSettings.autoActivate = jsonPropertiesObject.GetNamedBoolean(JSON_KEY_VALUE); + } + catch (...) + { + Logger::warn("Failed to initialize auto activate from settings. Will use default value"); + } } else { diff --git a/src/settings-ui/Settings.UI.Library/MouseHighlighterProperties.cs b/src/settings-ui/Settings.UI.Library/MouseHighlighterProperties.cs index 66b08e9418..e40bed943c 100644 --- a/src/settings-ui/Settings.UI.Library/MouseHighlighterProperties.cs +++ b/src/settings-ui/Settings.UI.Library/MouseHighlighterProperties.cs @@ -34,6 +34,9 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonPropertyName("highlight_fade_duration_ms")] public IntProperty HighlightFadeDurationMs { get; set; } + [JsonPropertyName("auto_activate")] + public BoolProperty AutoActivate { get; set; } + public MouseHighlighterProperties() { ActivationShortcut = DefaultActivationShortcut; @@ -44,6 +47,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library HighlightRadius = new IntProperty(20); HighlightFadeDelayMs = new IntProperty(500); HighlightFadeDurationMs = new IntProperty(250); + AutoActivate = new BoolProperty(false); } } } diff --git a/src/settings-ui/Settings.UI.Library/MousePointerCrosshairsProperties.cs b/src/settings-ui/Settings.UI.Library/MousePointerCrosshairsProperties.cs index f543a34bdd..6003aa0ade 100644 --- a/src/settings-ui/Settings.UI.Library/MousePointerCrosshairsProperties.cs +++ b/src/settings-ui/Settings.UI.Library/MousePointerCrosshairsProperties.cs @@ -40,6 +40,9 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonPropertyName("crosshairs_fixed_length")] public IntProperty CrosshairsFixedLength { get; set; } + [JsonPropertyName("auto_activate")] + public BoolProperty AutoActivate { get; set; } + public MousePointerCrosshairsProperties() { ActivationShortcut = DefaultActivationShortcut; @@ -52,6 +55,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library CrosshairsAutoHide = new BoolProperty(false); CrosshairsIsFixedLengthEnabled = new BoolProperty(false); CrosshairsFixedLength = new IntProperty(1); + AutoActivate = new BoolProperty(false); } } } diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseUtilsPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseUtilsPage.xaml index 2df5b2e824..77ee711c07 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseUtilsPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseUtilsPage.xaml @@ -149,14 +149,22 @@ IsOpen="{x:Bind Mode=OneWay, Path=ViewModel.IsHighlighterEnabledGpoConfigured}" IsTabStop="{x:Bind Mode=OneWay, Path=ViewModel.IsHighlighterEnabledGpoConfigured}" Severity="Informational" /> - + IsEnabled="{x:Bind ViewModel.IsMouseHighlighterEnabled, Mode=OneWay}" + IsExpanded="True"> - + + + + + + - + IsEnabled="{x:Bind ViewModel.IsMousePointerCrosshairsEnabled, Mode=OneWay}" + IsExpanded="True"> - + + + + + + Cancel - Press a combination of keys to change this shortcut + Press a combination of keys to change this shortcut - Press a combination of keys to change this shortcut. + Press a combination of keys to change this shortcut. Right-click to remove the key combination, thereby deactivating the shortcut. @@ -3593,6 +3593,9 @@ Activate by holding the key for the character you want to add an accent to, then Automatically hide crosshairs when the mouse pointer is hidden + + Automatically activate on utility startup + Find more plugins diff --git a/src/settings-ui/Settings.UI/ViewModels/MouseUtilsViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/MouseUtilsViewModel.cs index b8fe2460be..1ecdd02504 100644 --- a/src/settings-ui/Settings.UI/ViewModels/MouseUtilsViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/MouseUtilsViewModel.cs @@ -82,6 +82,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels _highlighterRadius = MouseHighlighterSettingsConfig.Properties.HighlightRadius.Value; _highlightFadeDelayMs = MouseHighlighterSettingsConfig.Properties.HighlightFadeDelayMs.Value; _highlightFadeDurationMs = MouseHighlighterSettingsConfig.Properties.HighlightFadeDurationMs.Value; + _highlighterAutoActivate = MouseHighlighterSettingsConfig.Properties.AutoActivate.Value; if (mouseJumpSettingsRepository == null) { @@ -111,6 +112,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels _mousePointerCrosshairsAutoHide = MousePointerCrosshairsSettingsConfig.Properties.CrosshairsAutoHide.Value; _mousePointerCrosshairsIsFixedLengthEnabled = MousePointerCrosshairsSettingsConfig.Properties.CrosshairsIsFixedLengthEnabled.Value; _mousePointerCrosshairsFixedLength = MousePointerCrosshairsSettingsConfig.Properties.CrosshairsFixedLength.Value; + _mousePointerCrosshairsAutoActivate = MousePointerCrosshairsSettingsConfig.Properties.AutoActivate.Value; // set the callback functions value to handle outgoing IPC message. SendConfigMSG = ipcMSGCallBackFunc; @@ -549,6 +551,24 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels } } + public bool MouseHighlighterAutoActivate + { + get + { + return _highlighterAutoActivate; + } + + set + { + if (value != _highlighterAutoActivate) + { + _highlighterAutoActivate = value; + MouseHighlighterSettingsConfig.Properties.AutoActivate.Value = value; + NotifyMouseHighlighterPropertyChanged(); + } + } + } + public void NotifyMouseHighlighterPropertyChanged([CallerMemberName] string propertyName = null) { OnPropertyChanged(propertyName); @@ -852,6 +872,24 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels } } + public bool MousePointerCrosshairsAutoActivate + { + get + { + return _mousePointerCrosshairsAutoActivate; + } + + set + { + if (value != _mousePointerCrosshairsAutoActivate) + { + _mousePointerCrosshairsAutoActivate = value; + MousePointerCrosshairsSettingsConfig.Properties.AutoActivate.Value = value; + NotifyMousePointerCrosshairsPropertyChanged(); + } + } + } + public void NotifyMousePointerCrosshairsPropertyChanged([CallerMemberName] string propertyName = null) { OnPropertyChanged(propertyName); @@ -896,6 +934,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels private int _highlighterRadius; private int _highlightFadeDelayMs; private int _highlightFadeDurationMs; + private bool _highlighterAutoActivate; private GpoRuleConfigured _jumpEnabledGpoRuleConfiguration; private bool _jumpEnabledStateIsGPOConfigured; @@ -913,5 +952,6 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels private bool _mousePointerCrosshairsAutoHide; private bool _mousePointerCrosshairsIsFixedLengthEnabled; private int _mousePointerCrosshairsFixedLength; + private bool _mousePointerCrosshairsAutoActivate; } }