Files
PowerToys/doc/devdocs/settingsv2/hotkeycontrol.md
Alekhya 18eb6b4ffd Dev documentation of SettingsV2 (#7335)
* created a folder for settings and added an overview, hotkey information

* basic structure for communication between settings and runner

* Added information about the IPC communication between settings and runner

* Added information about the communication between the settings process and modules

* Added details on backward compatibility

* brief overview on settings utils

* added an overview of the viewmodels and anomalies

* minor modifications

* Settings v2 dev docs (#7334)

* Added settings architecture and tech stack dev docs

* Added telemetry and updated architecture docs for settings v2

* Fix image link in ui_architecture markdown

* Added table of contents for settings v2

* Correct file path for ui architecture image

* nit fix in table of contents heading

* Add doc for xaml island tweaks

Co-authored-by: Divyansh Srivastava <somm14divi@gmail.com>
2020-10-20 14:28:06 -07:00

2.2 KiB

Custom HotKey Control

The Settings project provides a custom hotkey control which consumes key presses. This control can be used to set the hotkey of any PowerToy.

HotKey Control in FancyZones

Image of hotkey control

HotkeySettingsControlHook.cs

  • This function initializes and starts the keyboardHook for the hotkey control.
        public HotkeySettingsControlHook(KeyEvent keyDown, KeyEvent keyUp, IsActive isActive, FilterAccessibleKeyboardEvents filterAccessibleKeyboardEvents)
        {
            _keyDown = keyDown;
            _keyUp = keyUp;
            _isActive = isActive;
            _filterKeyboardEvent = filterAccessibleKeyboardEvents;
            _hook = new KeyboardHook(HotkeySettingsHookCallback, IsActive, FilterKeyboardEvents);
            _hook.Start();
        }
        

HotkeySettingsControl.xaml.cs

  • The function of this class is to update the state of the keys being pressed within the custom control. This information is stored in internalSettings.

  • It provides the following callbacks to the HotKeySettingsControlHook:

    • KeyUp: Resets the key state in internalSettings when a key is released.
    • KeyDown: Updates the user facing text of the hotkey control as soon as a key is pressed.
    • isActive: Sets the current status of the keyboard hook.
    • FilterAccessibleKeyboardEvents: This function is used to ignore the Tab and Shift+Tab key presses to meet the accessibility requirements.

HotkeySettings.cs

  • Contains the structure of a HotKey where it is represented as a combination of one of the modifier keys (Alt, Shift, Win and Ctrl) and a non-modifier key.

Note

  • The control displays all key presses to the user (except Tab and Shift+Tab which move focus out of the control). However, when the focus is being lost from the control, the lastValidHotkeySettings is set as the user facing text.