mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 18:57:19 +02:00
* Adjustments on default keystroke and removing key string whihc really didn't do anything * moving color picker into alphabetical order * removing removed property * adjusting comment based on feedback from martin Co-authored-by: Clint Rutkas <crutkas@microsoft.com>
176 lines
5.9 KiB
C#
176 lines
5.9 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 Microsoft.PowerToys.Settings.UI.Lib;
|
|
using Windows.UI.Core;
|
|
using Windows.UI.Xaml;
|
|
using Windows.UI.Xaml.Controls;
|
|
using Windows.UI.Xaml.Input;
|
|
using System;
|
|
using System.Data;
|
|
|
|
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
|
|
namespace Microsoft.PowerToys.Settings.UI.Controls
|
|
{
|
|
public sealed partial class HotkeySettingsControl : UserControl
|
|
{
|
|
public string Header { get; set; }
|
|
|
|
public static readonly DependencyProperty IsActiveProperty =
|
|
DependencyProperty.Register(
|
|
"Enabled",
|
|
typeof(string),
|
|
typeof(HotkeySettingsControl),
|
|
null);
|
|
|
|
private string _enabled = "False";
|
|
|
|
public string Enabled
|
|
{
|
|
get
|
|
{
|
|
return _enabled;
|
|
}
|
|
|
|
set
|
|
{
|
|
SetValue(IsActiveProperty, value);
|
|
_enabled = value;
|
|
|
|
if (value.ToString().ToLower() == "true")
|
|
{
|
|
HotkeyTextBox.IsEnabled = true;
|
|
}
|
|
else
|
|
{
|
|
HotkeyTextBox.IsEnabled = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static readonly DependencyProperty HotkeySettingsProperty =
|
|
DependencyProperty.Register(
|
|
"HotkeySettings",
|
|
typeof(HotkeySettings),
|
|
typeof(HotkeySettingsControl),
|
|
null);
|
|
|
|
private HotkeySettings hotkeySettings;
|
|
private HotkeySettings internalSettings;
|
|
private HotkeySettings lastValidSettings;
|
|
private HotkeySettingsControlHook hook;
|
|
private bool _isActive;
|
|
|
|
public HotkeySettings HotkeySettings
|
|
{
|
|
get
|
|
{
|
|
return hotkeySettings;
|
|
}
|
|
|
|
set
|
|
{
|
|
if (hotkeySettings != value)
|
|
{
|
|
hotkeySettings = value;
|
|
SetValue(HotkeySettingsProperty, value);
|
|
HotkeyTextBox.Text = HotkeySettings.ToString();
|
|
}
|
|
}
|
|
}
|
|
|
|
public HotkeySettingsControl()
|
|
{
|
|
InitializeComponent();
|
|
internalSettings = new HotkeySettings();
|
|
|
|
HotkeyTextBox.GettingFocus += HotkeyTextBox_GettingFocus;
|
|
HotkeyTextBox.LosingFocus += HotkeyTextBox_LosingFocus;
|
|
HotkeyTextBox.Unloaded += HotkeyTextBox_Unloaded;
|
|
hook = new HotkeySettingsControlHook(Hotkey_KeyDown, Hotkey_KeyUp, Hotkey_IsActive);
|
|
}
|
|
|
|
private void HotkeyTextBox_Unloaded(object sender, RoutedEventArgs e)
|
|
{
|
|
// Dispose the HotkeySettingsControlHook object to terminate the hook threads when the textbox is unloaded
|
|
hook.Dispose();
|
|
}
|
|
|
|
private void KeyEventHandler(int key, bool matchValue, int matchValueCode, string matchValueText)
|
|
{
|
|
switch ((Windows.System.VirtualKey)key)
|
|
{
|
|
case Windows.System.VirtualKey.LeftWindows:
|
|
case Windows.System.VirtualKey.RightWindows:
|
|
internalSettings.Win = matchValue;
|
|
break;
|
|
case Windows.System.VirtualKey.Control:
|
|
case Windows.System.VirtualKey.LeftControl:
|
|
case Windows.System.VirtualKey.RightControl:
|
|
internalSettings.Ctrl = matchValue;
|
|
break;
|
|
case Windows.System.VirtualKey.Menu:
|
|
case Windows.System.VirtualKey.LeftMenu:
|
|
case Windows.System.VirtualKey.RightMenu:
|
|
internalSettings.Alt = matchValue;
|
|
break;
|
|
case Windows.System.VirtualKey.Shift:
|
|
case Windows.System.VirtualKey.LeftShift:
|
|
case Windows.System.VirtualKey.RightShift:
|
|
internalSettings.Shift = matchValue;
|
|
break;
|
|
case Windows.System.VirtualKey.Escape:
|
|
internalSettings = new HotkeySettings();
|
|
HotkeySettings = new HotkeySettings();
|
|
return;
|
|
default:
|
|
internalSettings.Code = matchValueCode;
|
|
break;
|
|
}
|
|
}
|
|
|
|
private async void Hotkey_KeyDown(int key)
|
|
{
|
|
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
|
|
{
|
|
KeyEventHandler(key, true, key, Lib.Utilities.Helper.GetKeyName((uint)key));
|
|
if (internalSettings.Code > 0)
|
|
{
|
|
lastValidSettings = internalSettings.Clone();
|
|
HotkeyTextBox.Text = lastValidSettings.ToString();
|
|
}
|
|
});
|
|
}
|
|
|
|
private async void Hotkey_KeyUp(int key)
|
|
{
|
|
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
|
|
{
|
|
KeyEventHandler(key, false, 0, string.Empty);
|
|
});
|
|
}
|
|
|
|
private bool Hotkey_IsActive()
|
|
{
|
|
return _isActive;
|
|
}
|
|
|
|
private void HotkeyTextBox_GettingFocus(object sender, RoutedEventArgs e)
|
|
{
|
|
_isActive = true;
|
|
}
|
|
|
|
private void HotkeyTextBox_LosingFocus(object sender, RoutedEventArgs e)
|
|
{
|
|
if (lastValidSettings != null && (lastValidSettings.IsValid() || lastValidSettings.IsEmpty()))
|
|
{
|
|
HotkeySettings = lastValidSettings.Clone();
|
|
}
|
|
|
|
HotkeyTextBox.Text = hotkeySettings.ToString();
|
|
_isActive = false;
|
|
}
|
|
}
|
|
}
|