[Keyboard Manager] Updated WinUI3 KBM and toggles (#45649)

## Running the Project
**Option 1: Test via runner**
1. Check out branch `niels9001/kbm-ux-consolidation`
2. Build PowerToys project
3. Manually build `Modules/KeyboardManagerEditorUI` project separately
4. Run `runner` project
5. Ensure experimental features are enabled in general settings (should
be on by default)
6. Launch keyboard manager via settings app

**Option 2: Test via installer**
1. Install PowerToys via installer on azure pipeline
1. Launch keyboard manager

## Validation
For each page (Text, Remappings, Programs, URLs):
* Create shortcuts with variable options and ensure they run as expected
* Delete shortcuts and ensure they no longer execute
* Try to create invalid shortcuts to check for proper validation
* Ensure created shortcuts appear in Power Toys Settings Keyboard
manager page
* Try toggling shortcuts
* Try deleting shortcuts while toggled off

### UI
* Any feedback on UI design appreciated as well
<img width="1071" height="671" alt="image"
src="https://github.com/user-attachments/assets/d2e81de0-6d92-4189-9a33-32e94cce74f7"
/>
<img width="2142" height="1341" alt="image"
src="https://github.com/user-attachments/assets/0e4e5685-fdf1-4dfd-ba52-a2e5bc9a66db"
/>



Closes: #15870
Closes: #31902
Closes: #45302
Closes: #36227
Closes: #16093
Closes: #13409
Closes: #9919
Closes:  #9482
Closes: #8798
Closes:  #7054
Closes: #2733
Closes: #2027
Closes: #30167

---------

Co-authored-by: Hao Liu <liuhao3418@gmail.com>
Co-authored-by: chenmy77 <162882040+chenmy77@users.noreply.github.com>
Co-authored-by: Niels Laute <niels.laute@live.nl>
Co-authored-by: Jay <65828559+Jay-o-Way@users.noreply.github.com>
Co-authored-by: Jaylyn Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com>
Co-authored-by: Dustin L. Howett <duhowett@microsoft.com>
This commit is contained in:
Zach Teutsch
2026-03-04 15:46:42 -05:00
committed by GitHub
parent d20ae940d5
commit f651d1a611
85 changed files with 8080 additions and 399 deletions

View File

@@ -0,0 +1,103 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KeyboardManagerEditorUI.Interop
{
public class ShortcutKeyMapping
{
public string OriginalKeys { get; set; } = string.Empty;
public string TargetKeys { get; set; } = string.Empty;
public string TargetApp { get; set; } = string.Empty;
public ShortcutOperationType OperationType { get; set; }
public string TargetText { get; set; } = string.Empty;
public string ProgramPath { get; set; } = string.Empty;
public string ProgramArgs { get; set; } = string.Empty;
public string StartInDirectory { get; set; } = string.Empty;
public ElevationLevel Elevation { get; set; } = ElevationLevel.NonElevated;
public ProgramAlreadyRunningAction IfRunningAction { get; set; } = ProgramAlreadyRunningAction.ShowWindow;
public StartWindowType Visibility { get; set; } = StartWindowType.Normal;
public string UriToOpen { get; set; } = string.Empty;
public enum ElevationLevel
{
NonElevated = 0,
Elevated = 1,
DifferentUser = 2,
}
public enum StartWindowType
{
Normal = 0,
Hidden = 1,
Minimized = 2,
Maximized = 3,
}
public enum ProgramAlreadyRunningAction
{
ShowWindow = 0,
StartAnother = 1,
DoNothing = 2,
Close = 3,
EndTask = 4,
CloseAndEndTask = 5,
}
public override bool Equals(object? obj)
{
if (obj is not ShortcutKeyMapping other)
{
return false;
}
return OriginalKeys == other.OriginalKeys &&
TargetKeys == other.TargetKeys &&
TargetApp == other.TargetApp &&
OperationType == other.OperationType &&
TargetText == other.TargetText &&
ProgramPath == other.ProgramPath &&
ProgramArgs == other.ProgramArgs &&
StartInDirectory == other.StartInDirectory &&
Elevation == other.Elevation &&
IfRunningAction == other.IfRunningAction &&
Visibility == other.Visibility &&
UriToOpen == other.UriToOpen;
}
public override int GetHashCode()
{
HashCode hash = default(HashCode);
hash.Add(OriginalKeys);
hash.Add(TargetKeys);
hash.Add(TargetApp);
hash.Add(OperationType);
hash.Add(TargetText);
hash.Add(ProgramPath);
hash.Add(ProgramArgs);
hash.Add(StartInDirectory);
hash.Add(Elevation);
hash.Add(IfRunningAction);
hash.Add(Visibility);
hash.Add(UriToOpen);
return hash.ToHashCode();
}
}
}