mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-04 02:06:36 +02:00
## Summary of the Pull Request Adds a keyboard shortcut to be able to toggle the Keyboard Manager module on and off. ## PR Checklist - [x] Closes: #4879 - [x] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx ## Detailed Description of the Pull Request / Additional comments Modeled the changes and addition of a global shortcut using the Color Picker module. Notes: - This uses `KeyboardManagerSettings` and the associated .json settings file. I don't think there's anything else in this module that uses this. - The default key binding for this is `winkey + shift + k` - I've had to update the `KeyboardManagerViewModel` to extend `PageViewModelBase` as opposed to `Observable` to get it to work. But I will say that there were some things in here that I didn't fully dig into, so let me know if there's any potential things I'm missing. - I'm not too sure how to update the Settings UI after a hotkey is pressed (pressing the hotkey currently will not show the module being toggled off) - can't find a good way to refresh the settings ui after enabling/disabling the module. Any pointers here would be appreciated! ## Validation Steps Performed - Manually validated the following items: - Using the default shortcut (`winkey + shift + k`) - Changing the shortcut - Ensuring the change is persistent ## Media https://github.com/user-attachments/assets/e471b8df-787a-441e-b9e0-330361865c76 --------- Co-authored-by: Weike Qu <weikequ@get-stride.com> Co-authored-by: Leilei Zhang <leilzh@microsoft.com> Co-authored-by: vanzue <vanzue@outlook.com> Co-authored-by: Kai Tao <69313318+vanzue@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
41 lines
1.4 KiB
C#
41 lines
1.4 KiB
C#
// 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.Collections.Generic;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
using Settings.UI.Library.Attributes;
|
|
|
|
namespace Microsoft.PowerToys.Settings.UI.Library
|
|
{
|
|
public class KeyboardManagerProperties
|
|
{
|
|
[JsonPropertyName("activeConfiguration")]
|
|
[CmdConfigureIgnoreAttribute]
|
|
public GenericProperty<string> ActiveConfiguration { get; set; }
|
|
|
|
// List of all Keyboard Configurations.
|
|
[JsonPropertyName("keyboardConfigurations")]
|
|
[CmdConfigureIgnoreAttribute]
|
|
public GenericProperty<List<string>> KeyboardConfigurations { get; set; }
|
|
|
|
public HotkeySettings DefaultToggleShortcut => new HotkeySettings(true, false, false, true, 0x4B);
|
|
|
|
public KeyboardManagerProperties()
|
|
{
|
|
ToggleShortcut = DefaultToggleShortcut;
|
|
KeyboardConfigurations = new GenericProperty<List<string>>(new List<string> { "default", });
|
|
ActiveConfiguration = new GenericProperty<string>("default");
|
|
}
|
|
|
|
public HotkeySettings ToggleShortcut { get; set; }
|
|
|
|
public string ToJsonString()
|
|
{
|
|
return JsonSerializer.Serialize(this);
|
|
}
|
|
}
|
|
}
|