From 77d67f35999bdf5cbaf96092c87e718afab91409 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Mon, 22 Mar 2021 09:15:47 +0000 Subject: [PATCH] [Color Picker] Use escape key to exit colour editor UI (#10325) * Use escape key to exit color editor UI * Logic handling formatting --- .../ColorPickerUI/Helpers/AppStateHandler.cs | 19 +++++++++++++++++++ .../ColorPickerUI/Keyboard/KeyboardMonitor.cs | 12 ++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/modules/colorPicker/ColorPickerUI/Helpers/AppStateHandler.cs b/src/modules/colorPicker/ColorPickerUI/Helpers/AppStateHandler.cs index 0b1f479cc6..cae2ef4fa0 100644 --- a/src/modules/colorPicker/ColorPickerUI/Helpers/AppStateHandler.cs +++ b/src/modules/colorPicker/ColorPickerUI/Helpers/AppStateHandler.cs @@ -71,6 +71,25 @@ namespace ColorPicker.Helpers _colorEditorWindow.Show(); } + public void HideColorPickerEditor() + { + if (_colorEditorWindow != null) + { + _colorEditorWindow.Hide(); + } + } + + public bool IsColorPickerEditorVisible() + { + if (_colorEditorWindow != null) + { + // Check if we are visible and on top. Using focus producing unreliable results the first time the picker is opened. + return _colorEditorWindow.Topmost && _colorEditorWindow.IsVisible; + } + + return false; + } + public static void SetTopMost() { Application.Current.MainWindow.Topmost = false; diff --git a/src/modules/colorPicker/ColorPickerUI/Keyboard/KeyboardMonitor.cs b/src/modules/colorPicker/ColorPickerUI/Keyboard/KeyboardMonitor.cs index 5f51fe40ca..a96dbe092c 100644 --- a/src/modules/colorPicker/ColorPickerUI/Keyboard/KeyboardMonitor.cs +++ b/src/modules/colorPicker/ColorPickerUI/Keyboard/KeyboardMonitor.cs @@ -72,8 +72,16 @@ namespace ColorPicker.Keyboard // ESC pressed if (virtualCode == KeyInterop.VirtualKeyFromKey(Key.Escape)) { - _appStateHandler.HideColorPicker(); - PowerToysTelemetry.Log.WriteEvent(new ColorPickerCancelledEvent()); + if (_appStateHandler.IsColorPickerEditorVisible()) + { + _appStateHandler.HideColorPickerEditor(); + } + else + { + _appStateHandler.HideColorPicker(); + PowerToysTelemetry.Log.WriteEvent(new ColorPickerCancelledEvent()); + } + return; }