From 9a9ee9cdf5e790a5eb8bbb317798b8ef008bfc0f Mon Sep 17 00:00:00 2001 From: Zach Teutsch <88554871+zateutsch@users.noreply.github.com> Date: Tue, 10 Feb 2026 01:27:49 -0500 Subject: [PATCH] added toggles for key remappings --- .../Helpers/Remapping.cs | 8 +- .../Helpers/RemappingHelper.cs | 54 ++++++++++-- .../Helpers/ValidationHelper.cs | 10 +-- .../KeyboardManagerEditorUI/Pages/All.xaml | 7 +- .../KeyboardManagerEditorUI/Pages/All.xaml.cs | 81 +++++++++--------- .../Pages/Remappings.xaml | 2 +- .../Pages/Remappings.xaml.cs | 6 +- .../Settings/SettingsManager.cs | 85 ++++++++++++++++++- 8 files changed, 186 insertions(+), 67 deletions(-) diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/Remapping.cs b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/Remapping.cs index 211b8540f9..918a66205d 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/Remapping.cs +++ b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/Remapping.cs @@ -12,9 +12,9 @@ using System.Threading.Tasks; namespace KeyboardManagerEditorUI.Helpers { - public partial class Remapping : INotifyPropertyChanged + public partial class Remapping : INotifyPropertyChanged, IToggleableShortcut { - public List OriginalKeys { get; set; } = new List(); + public List Shortcut { get; set; } = new List(); public List RemappedKeys { get; set; } = new List(); @@ -24,6 +24,10 @@ namespace KeyboardManagerEditorUI.Helpers private bool IsEnabledValue { get; set; } = true; + public string Id { get; set; } = string.Empty; + + public bool IsActive { get; set; } = true; + public event PropertyChangedEventHandler? PropertyChanged; public bool IsEnabled diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/RemappingHelper.cs b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/RemappingHelper.cs index bc6d595228..48c32d853c 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/RemappingHelper.cs +++ b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/RemappingHelper.cs @@ -9,6 +9,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using KeyboardManagerEditorUI.Interop; +using KeyboardManagerEditorUI.Settings; using ManagedCommon; using Windows.System; @@ -16,7 +17,7 @@ namespace KeyboardManagerEditorUI.Helpers { public static class RemappingHelper { - public static bool SaveMapping(KeyboardMappingService mappingService, List originalKeys, List remappedKeys, bool isAppSpecific, string appName) + public static bool SaveMapping(KeyboardMappingService mappingService, List originalKeys, List remappedKeys, bool isAppSpecific, string appName, bool saveToSettings = true) { if (mappingService == null) { @@ -34,8 +35,17 @@ namespace KeyboardManagerEditorUI.Helpers if (originalKeys.Count == 1) { int originalKey = mappingService.GetKeyCodeFromName(originalKeys[0]); + if (originalKey != 0) { + string targetKeysString = string.Join(";", remappedKeys.Select(k => mappingService.GetKeyCodeFromName(k).ToString(CultureInfo.InvariantCulture))); + ShortcutKeyMapping shortcutKeyMapping = new ShortcutKeyMapping() + { + OperationType = ShortcutOperationType.RemapShortcut, + OriginalKeys = originalKey.ToString(CultureInfo.InvariantCulture), + TargetKeys = targetKeysString, + TargetApp = isAppSpecific ? appName : string.Empty, + }; if (remappedKeys.Count == 1) { int targetKey = mappingService.GetKeyCodeFromName(remappedKeys[0]); @@ -46,8 +56,12 @@ namespace KeyboardManagerEditorUI.Helpers } else { - string targetKeys = string.Join(";", remappedKeys.Select(k => mappingService.GetKeyCodeFromName(k).ToString(CultureInfo.InvariantCulture))); - mappingService.AddSingleKeyMapping(originalKey, targetKeys); + mappingService.AddSingleKeyMapping(originalKey, targetKeysString); + } + + if (saveToSettings) + { + SettingsManager.AddShortcutKeyMappingToSettings(shortcutKeyMapping); } } } @@ -56,6 +70,14 @@ namespace KeyboardManagerEditorUI.Helpers string originalKeysString = string.Join(";", originalKeys.Select(k => mappingService.GetKeyCodeFromName(k).ToString(CultureInfo.InvariantCulture))); string targetKeysString = string.Join(";", remappedKeys.Select(k => mappingService.GetKeyCodeFromName(k).ToString(CultureInfo.InvariantCulture))); + ShortcutKeyMapping shortcutKeyMapping = new ShortcutKeyMapping() + { + OperationType = ShortcutOperationType.RemapShortcut, + OriginalKeys = originalKeysString, + TargetKeys = targetKeysString, + TargetApp = isAppSpecific ? appName : string.Empty, + }; + if (isAppSpecific && !string.IsNullOrEmpty(appName)) { mappingService.AddShortcutMapping(originalKeysString, targetKeysString, appName); @@ -64,6 +86,11 @@ namespace KeyboardManagerEditorUI.Helpers { mappingService.AddShortcutMapping(originalKeysString, targetKeysString); } + + if (saveToSettings) + { + SettingsManager.AddShortcutKeyMappingToSettings(shortcutKeyMapping); + } } return mappingService.SaveSettings(); @@ -75,7 +102,7 @@ namespace KeyboardManagerEditorUI.Helpers } } - public static bool DeleteRemapping(KeyboardMappingService mappingService, Remapping remapping) + public static bool DeleteRemapping(KeyboardMappingService mappingService, Remapping remapping, bool deleteFromSettings = true) { if (mappingService == null) { @@ -84,23 +111,27 @@ namespace KeyboardManagerEditorUI.Helpers try { - if (remapping.OriginalKeys.Count == 1) + if (remapping.Shortcut.Count == 1) { // Single key mapping - int originalKey = mappingService.GetKeyCodeFromName(remapping.OriginalKeys[0]); + int originalKey = mappingService.GetKeyCodeFromName(remapping.Shortcut[0]); if (originalKey != 0) { if (mappingService.DeleteSingleKeyMapping(originalKey)) { - // Save settings after successful deletion + if (deleteFromSettings) + { + SettingsManager.RemoveShortcutKeyMappingFromSettings(remapping.Id); + } + return mappingService.SaveSettings(); } } } - else if (remapping.OriginalKeys.Count > 1) + else if (remapping.Shortcut.Count > 1) { // Shortcut mapping - string originalKeysString = string.Join(";", remapping.OriginalKeys.Select(k => mappingService.GetKeyCodeFromName(k).ToString(CultureInfo.InvariantCulture))); + string originalKeysString = string.Join(";", remapping.Shortcut.Select(k => mappingService.GetKeyCodeFromName(k).ToString(CultureInfo.InvariantCulture))); bool deleteResult; if (!remapping.IsAllApps && !string.IsNullOrEmpty(remapping.AppName)) @@ -114,6 +145,11 @@ namespace KeyboardManagerEditorUI.Helpers deleteResult = mappingService.DeleteShortcutMapping(originalKeysString); } + if (deleteResult && deleteFromSettings) + { + SettingsManager.RemoveShortcutKeyMappingFromSettings(remapping.Id); + } + return deleteResult ? mappingService.SaveSettings() : false; } diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/ValidationHelper.cs b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/ValidationHelper.cs index 78442edd7a..abd55fe252 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/ValidationHelper.cs +++ b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/ValidationHelper.cs @@ -180,8 +180,8 @@ namespace KeyboardManagerEditorUI.Helpers { // Skip if the remapping is the same as the one being edited if (isEditMode && editingRemapping != null && - editingRemapping.OriginalKeys.Count == 1 && - mappingService.GetKeyCodeFromName(editingRemapping.OriginalKeys[0]) == originalKeyCode) + editingRemapping.Shortcut.Count == 1 && + mappingService.GetKeyCodeFromName(editingRemapping.Shortcut[0]) == originalKeyCode) { continue; } @@ -201,7 +201,7 @@ namespace KeyboardManagerEditorUI.Helpers bool isEditingExistingRemapping = false; if (isEditMode && editingRemapping != null) { - string editingOriginalKeysString = string.Join(";", editingRemapping.OriginalKeys.Select(k => + string editingOriginalKeysString = string.Join(";", editingRemapping.Shortcut.Select(k => mappingService.GetKeyCodeFromName(k).ToString(CultureInfo.InvariantCulture))); if (KeyboardManagerInterop.AreShortcutsEqual(originalKeysString, editingOriginalKeysString)) @@ -219,7 +219,7 @@ namespace KeyboardManagerEditorUI.Helpers if (!isAppSpecific && string.IsNullOrEmpty(mapping.TargetApp)) { // Skip if the remapping is the same as the one being edited - if (editingRemapping != null && editingRemapping.OriginalKeys.Count > 1 && editingRemapping.IsAllApps && isEditingExistingRemapping) + if (editingRemapping != null && editingRemapping.Shortcut.Count > 1 && editingRemapping.IsAllApps && isEditingExistingRemapping) { continue; } @@ -232,7 +232,7 @@ namespace KeyboardManagerEditorUI.Helpers && string.Equals(mapping.TargetApp, appName, StringComparison.OrdinalIgnoreCase)) { // Skip if the remapping is the same as the one being edited - if (editingRemapping != null && editingRemapping.OriginalKeys.Count > 1 && !editingRemapping.IsAllApps && + if (editingRemapping != null && editingRemapping.Shortcut.Count > 1 && !editingRemapping.IsAllApps && string.Equals(editingRemapping.AppName, appName, StringComparison.OrdinalIgnoreCase) && isEditingExistingRemapping) { continue; diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Pages/All.xaml b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Pages/All.xaml index 31cf4e7f7b..984454e639 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Pages/All.xaml +++ b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Pages/All.xaml @@ -119,7 +119,7 @@ - + @@ -162,7 +162,10 @@ Grid.Column="1" Orientation="Horizontal" Spacing="8"> - +