File tree Expand file tree Collapse file tree 2 files changed +72
-7
lines changed Expand file tree Collapse file tree 2 files changed +72
-7
lines changed Original file line number Diff line number Diff line change
1
+ using System . Collections . Generic ;
2
+ using System . Collections . Immutable ;
3
+ using Windows . System ;
4
+
5
+ namespace Files . App . Commands
6
+ {
7
+ internal static class HotKeyHelpers
8
+ {
9
+ private static readonly ImmutableArray < VirtualKey > globalKeys = new List < VirtualKey >
10
+ {
11
+ VirtualKey . GoHome ,
12
+ VirtualKey . GoBack ,
13
+ VirtualKey . GoForward ,
14
+ VirtualKey . Application ,
15
+ VirtualKey . Favorites ,
16
+ VirtualKey . Search ,
17
+ VirtualKey . Refresh ,
18
+ VirtualKey . Pause ,
19
+ VirtualKey . Sleep ,
20
+ VirtualKey . Print ,
21
+ VirtualKey . F1 ,
22
+ VirtualKey . F2 ,
23
+ VirtualKey . F3 ,
24
+ VirtualKey . F4 ,
25
+ VirtualKey . F5 ,
26
+ VirtualKey . F6 ,
27
+ VirtualKey . F7 ,
28
+ VirtualKey . F8 ,
29
+ VirtualKey . F9 ,
30
+ VirtualKey . F10 ,
31
+ VirtualKey . F11 ,
32
+ VirtualKey . F12 ,
33
+ VirtualKey . F13 ,
34
+ VirtualKey . F14 ,
35
+ VirtualKey . F15 ,
36
+ VirtualKey . F16 ,
37
+ VirtualKey . F17 ,
38
+ VirtualKey . F18 ,
39
+ VirtualKey . F19 ,
40
+ VirtualKey . F20 ,
41
+ VirtualKey . F21 ,
42
+ VirtualKey . F22 ,
43
+ VirtualKey . F23 ,
44
+ VirtualKey . F24 ,
45
+ } . ToImmutableArray ( ) ;
46
+
47
+ private static readonly ImmutableArray < HotKey > textBoxHotKeys = new List < HotKey >
48
+ {
49
+ new HotKey ( VirtualKey . X , VirtualKeyModifiers . Control ) , // Cut
50
+ new HotKey ( VirtualKey . C , VirtualKeyModifiers . Control ) , // Copy
51
+ new HotKey ( VirtualKey . V , VirtualKeyModifiers . Control ) , // Paste
52
+ new HotKey ( VirtualKey . A , VirtualKeyModifiers . Control ) , // Select all
53
+ new HotKey ( VirtualKey . Z , VirtualKeyModifiers . Control ) , // Cancel
54
+ } . ToImmutableArray ( ) ;
55
+
56
+ public static bool IsGlobalKey ( this VirtualKey key ) => globalKeys . Contains ( key ) ;
57
+ public static bool IsTextBoxHotKey ( this HotKey hotKey ) => textBoxHotKeys . Contains ( hotKey ) ;
58
+ }
59
+ }
Original file line number Diff line number Diff line change @@ -235,17 +235,23 @@ protected override async void OnPreviewKeyDown(KeyRoutedEventArgs e)
235
235
currentModifiers |= VirtualKeyModifiers . Shift ;
236
236
break ;
237
237
default :
238
- // break for natives hotkeys in textbox (cut/copy/paste/selectAll/cancel)
238
+ HotKey hotKey = new ( e . Key , currentModifiers ) ;
239
+
240
+ // A textbox takes precedence over certain hotkeys.
239
241
bool isTextBox = e . OriginalSource is DependencyObject source && source . FindAscendantOrSelf < TextBox > ( ) is not null ;
240
- if ( isTextBox &&
241
- currentModifiers is VirtualKeyModifiers . Control &&
242
- e . Key is VirtualKey . X or VirtualKey . C or VirtualKey . V or VirtualKey . A or VirtualKey . Z )
242
+ if ( isTextBox )
243
243
{
244
- break ;
244
+ if ( hotKey . IsTextBoxHotKey ( ) )
245
+ {
246
+ break ;
247
+ }
248
+ if ( currentModifiers is VirtualKeyModifiers . None && ! e . Key . IsGlobalKey ( ) )
249
+ {
250
+ break ;
251
+ }
245
252
}
246
253
247
- // execute command for hotkey
248
- var hotKey = new HotKey ( e . Key , currentModifiers ) ;
254
+ // Execute command for hotkey
249
255
var command = Commands [ hotKey ] ;
250
256
if ( command . Code is not CommandCodes . None && keyReleased )
251
257
{
You can’t perform that action at this time.
0 commit comments