From ea813ce1e7e13abdb82b7e3d7184b7e4f08792e0 Mon Sep 17 00:00:00 2001 From: Charlie Kindel Date: Mon, 18 May 2020 22:42:04 -0600 Subject: [PATCH 1/3] Refactored keydown/up/press events to use event vs. Action --- Example/demo.cs | 10 +++++----- Terminal.Gui/Core.cs | 37 +++++++++++++++++++++---------------- Terminal.Gui/Views/Menu.cs | 12 ++++++------ 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/Example/demo.cs b/Example/demo.cs index 6db1bb40b..9edfeb4d0 100644 --- a/Example/demo.cs +++ b/Example/demo.cs @@ -90,8 +90,8 @@ static class Demo { Width = Dim.Fill (), Height = Dim.Fill () }; - container.OnKeyUp += (KeyEvent ke) => { - if (ke.Key == Key.Esc) + container.KeyUp += (sender, e) => { + if (e.KeyEvent.Key == Key.Esc) container.Running = false; }; @@ -469,9 +469,9 @@ static class Demo { } - container.OnKeyDown += (KeyEvent keyEvent) => KeyDownPressUp (keyEvent, "Down"); - container.OnKeyPress += (KeyEvent keyEvent) => KeyDownPressUp (keyEvent, "Press"); - container.OnKeyUp += (KeyEvent keyEvent) => KeyDownPressUp (keyEvent, "Up"); + container.KeyDown += (o, e) => KeyDownPressUp (e.KeyEvent, "Down"); + container.KeyPress += (o, e) => KeyDownPressUp (e.KeyEvent, "Press"); + container.KeyUp += (o, e) => KeyDownPressUp (e.KeyEvent, "Up"); Application.Run (container); } #endregion diff --git a/Terminal.Gui/Core.cs b/Terminal.Gui/Core.cs index 91135771e..ad1fb8549 100644 --- a/Terminal.Gui/Core.cs +++ b/Terminal.Gui/Core.cs @@ -126,7 +126,7 @@ namespace Terminal.Gui { /// /// Contains the details about the key that produced the event. /// true if the event was handled - public virtual bool KeyDown (KeyEvent keyEvent) + public virtual bool OnKeyDown (KeyEvent keyEvent) { return false; } @@ -136,7 +136,7 @@ namespace Terminal.Gui { /// /// Contains the details about the key that produced the event. /// true if the event was handled - public virtual bool KeyUp (KeyEvent keyEvent) + public virtual bool OnKeyUp (KeyEvent keyEvent) { return false; } @@ -1066,15 +1066,20 @@ namespace Terminal.Gui { SuperView?.SetFocus(this); } + public class KeyEventEventArgs : EventArgs { + public KeyEventEventArgs(KeyEvent ke) => KeyEvent = ke; + public KeyEvent KeyEvent { get; set; } + } + /// /// Invoked when a character key is pressed and occurs after the key down event. /// - public Action OnKeyPress; + public event EventHandler KeyPress; /// Contains the details about the key that produced the event. public override bool ProcessKey (KeyEvent keyEvent) { - OnKeyPress?.Invoke (keyEvent); + KeyPress?.Invoke (this, new KeyEventEventArgs(keyEvent)); if (Focused?.ProcessKey (keyEvent) == true) return true; @@ -1084,7 +1089,7 @@ namespace Terminal.Gui { /// Contains the details about the key that produced the event. public override bool ProcessHotKey (KeyEvent keyEvent) { - OnKeyPress?.Invoke (keyEvent); + KeyPress?.Invoke (this, new KeyEventEventArgs (keyEvent)); if (subviews == null || subviews.Count == 0) return false; foreach (var view in subviews) @@ -1096,7 +1101,7 @@ namespace Terminal.Gui { /// Contains the details about the key that produced the event. public override bool ProcessColdKey (KeyEvent keyEvent) { - OnKeyPress?.Invoke (keyEvent); + KeyPress?.Invoke (this, new KeyEventEventArgs(keyEvent)); if (subviews == null || subviews.Count == 0) return false; foreach (var view in subviews) @@ -1108,16 +1113,16 @@ namespace Terminal.Gui { /// /// Invoked when a key is pressed /// - public Action OnKeyDown; + public event EventHandler KeyDown; /// Contains the details about the key that produced the event. - public override bool KeyDown (KeyEvent keyEvent) + public override bool OnKeyDown (KeyEvent keyEvent) { - OnKeyDown?.Invoke (keyEvent); + KeyDown?.Invoke (this, new KeyEventEventArgs (keyEvent)); if (subviews == null || subviews.Count == 0) return false; foreach (var view in subviews) - if (view.KeyDown (keyEvent)) + if (view.OnKeyDown (keyEvent)) return true; return false; @@ -1126,16 +1131,16 @@ namespace Terminal.Gui { /// /// Invoked when a key is released /// - public Action OnKeyUp; + public event EventHandler KeyUp; /// Contains the details about the key that produced the event. - public override bool KeyUp (KeyEvent keyEvent) + public override bool OnKeyUp (KeyEvent keyEvent) { - OnKeyUp?.Invoke (keyEvent); + KeyUp?.Invoke (this, new KeyEventEventArgs (keyEvent)); if (subviews == null || subviews.Count == 0) return false; foreach (var view in subviews) - if (view.KeyUp (keyEvent)) + if (view.OnKeyUp (keyEvent)) return true; return false; @@ -2142,7 +2147,7 @@ namespace Terminal.Gui { { var chain = toplevels.ToList (); foreach (var topLevel in chain) { - if (topLevel.KeyDown (ke)) + if (topLevel.OnKeyDown (ke)) return; if (topLevel.Modal) break; @@ -2154,7 +2159,7 @@ namespace Terminal.Gui { { var chain = toplevels.ToList (); foreach (var topLevel in chain) { - if (topLevel.KeyUp (ke)) + if (topLevel.OnKeyUp (ke)) return; if (topLevel.Modal) break; diff --git a/Terminal.Gui/Views/Menu.cs b/Terminal.Gui/Views/Menu.cs index 47f736676..0e40bd391 100644 --- a/Terminal.Gui/Views/Menu.cs +++ b/Terminal.Gui/Views/Menu.cs @@ -344,7 +344,7 @@ namespace Terminal.Gui { }); } - public override bool KeyDown (KeyEvent keyEvent) + public override bool OnKeyDown (KeyEvent keyEvent) { if (keyEvent.IsAlt) { host.CloseAllMenus (); @@ -359,7 +359,7 @@ namespace Terminal.Gui { // To ncurses simulate a AltMask key pressing Alt+Space because // it canīt detect an alone special key down was pressed. if (keyEvent.IsAlt && keyEvent.Key == Key.AltMask) { - KeyDown (keyEvent); + OnKeyDown (keyEvent); return true; } @@ -559,7 +559,7 @@ namespace Terminal.Gui { } bool openedByAltKey; - public override bool KeyDown (KeyEvent keyEvent) + public override bool OnKeyDown (KeyEvent keyEvent) { if (keyEvent.IsAlt) { openedByAltKey = true; @@ -575,7 +575,7 @@ namespace Terminal.Gui { /// /// /// - public override bool KeyUp (KeyEvent keyEvent) + public override bool OnKeyUp (KeyEvent keyEvent) { if (keyEvent.IsAlt) { // User pressed Alt - this may be a precursor to a menu accelerator (e.g. Alt-F) @@ -982,8 +982,8 @@ namespace Terminal.Gui { // To ncurses simulate a AltMask key pressing Alt+Space because // it canīt detect an alone special key down was pressed. if (kb.IsAlt && kb.Key == Key.AltMask && openMenu == null) { - KeyDown (kb); - KeyUp (kb); + OnKeyDown (kb); + OnKeyUp (kb); return true; } else if (kb.IsAlt) { if (FindAndOpenMenuByHotkey (kb)) return true; From b3f8f3bb29a0318767d3d5a3ddc74aa29e15f601 Mon Sep 17 00:00:00 2001 From: Charlie Kindel Date: Tue, 19 May 2020 00:04:14 -0600 Subject: [PATCH 2/3] missed some renames --- Example/demo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Example/demo.cs b/Example/demo.cs index 9edfeb4d0..cd39607d3 100644 --- a/Example/demo.cs +++ b/Example/demo.cs @@ -413,11 +413,11 @@ static class Demo { #endregion - #region OnKeyDown / OnKeyPress / OnKeyUp Demo + #region KeyDown / KeyPress / KeyUp Demo private static void OnKeyDownPressUpDemo () { var container = new Dialog ( - "OnKeyDown & OnKeyPress & OnKeyUp demo", 80, 20, + "KeyDown & KeyPress & KeyUp demo", 80, 20, new Button ("Close") { Clicked = () => { Application.RequestStop (); } }) { Width = Dim.Fill (), Height = Dim.Fill (), From 511447c80bcc3866b3e6924c600730b4b12e3daf Mon Sep 17 00:00:00 2001 From: Charlie Kindel Date: Thu, 21 May 2020 08:28:43 -0600 Subject: [PATCH 3/3] Re-fixed keydown not repeating issue. --- Terminal.Gui/Drivers/WindowsDriver.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Terminal.Gui/Drivers/WindowsDriver.cs b/Terminal.Gui/Drivers/WindowsDriver.cs index 343182dc0..0576071e3 100644 --- a/Terminal.Gui/Drivers/WindowsDriver.cs +++ b/Terminal.Gui/Drivers/WindowsDriver.cs @@ -673,10 +673,10 @@ namespace Terminal.Gui { keyUpHandler (key); } else { if (inputEvent.KeyEvent.bKeyDown) { + // Key Down - Fire KeyDown Event and KeyStroke (ProcessKey) Event + keyHandler (new KeyEvent (map)); keyDownHandler (new KeyEvent (map)); } else { - // Key Up - Fire KeyDown Event and KeyStroke (ProcessKey) Event - keyHandler (new KeyEvent (map)); keyUpHandler (new KeyEvent (map)); } }