mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
Rootkeyevent (#1635)
* Added RootKeyEvent * Tests for RootKeyEvent * Fixed warnings for Assert.Equal parameter order
This commit is contained in:
@@ -403,6 +403,9 @@ namespace Terminal.Gui {
|
||||
|
||||
static void ProcessKeyEvent (KeyEvent ke)
|
||||
{
|
||||
if(RootKeyEvent?.Invoke(ke) ?? false) {
|
||||
return;
|
||||
}
|
||||
|
||||
var chain = toplevels.ToList ();
|
||||
foreach (var topLevel in chain) {
|
||||
@@ -588,6 +591,15 @@ namespace Terminal.Gui {
|
||||
/// </summary>
|
||||
public static Action<MouseEvent> RootMouseEvent;
|
||||
|
||||
/// <summary>
|
||||
/// <para>
|
||||
/// Called for new KeyPress events before any processing is performed or
|
||||
/// views evaluate. Use for global key handling and/or debugging.
|
||||
/// </para>
|
||||
/// <para>Return true to suppress the KeyPress event</para>
|
||||
/// </summary>
|
||||
public static Func<KeyEvent,bool> RootKeyEvent;
|
||||
|
||||
internal static View wantContinuousButtonPressedView;
|
||||
static View lastMouseOwnerView;
|
||||
|
||||
@@ -872,6 +884,7 @@ namespace Terminal.Gui {
|
||||
Driver = null;
|
||||
Iteration = null;
|
||||
RootMouseEvent = null;
|
||||
RootKeyEvent = null;
|
||||
Resized = null;
|
||||
_initialized = false;
|
||||
mouseGrabView = null;
|
||||
|
||||
@@ -1178,5 +1178,38 @@ namespace Terminal.Gui.Views {
|
||||
Assert.Equal ("-1", oldText);
|
||||
Assert.Equal ("-", tf.Text);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[AutoInitShutdown]
|
||||
public void Test_RootKeyEvent_Cancel()
|
||||
{
|
||||
Application.RootKeyEvent += SuppressKey;
|
||||
|
||||
var tf = new TextField();
|
||||
|
||||
Application.Top.Add (tf);
|
||||
Application.Begin (Application.Top);
|
||||
|
||||
Application.Driver.SendKeys('a',ConsoleKey.A,false,false,false);
|
||||
Assert.Equal("a", tf.Text.ToString ());
|
||||
|
||||
// SuppressKey suppresses the 'j' key
|
||||
Application.Driver.SendKeys('j',ConsoleKey.A,false,false,false);
|
||||
Assert.Equal("a", tf.Text.ToString ());
|
||||
|
||||
Application.RootKeyEvent -= SuppressKey;
|
||||
|
||||
// Now that the delegate has been removed we can type j again
|
||||
Application.Driver.SendKeys('j',ConsoleKey.A,false,false,false);
|
||||
Assert.Equal("aj", tf.Text.ToString ());
|
||||
}
|
||||
|
||||
private bool SuppressKey (KeyEvent arg)
|
||||
{
|
||||
if(arg.KeyValue == 'j')
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user