From 72992bd8c75b4c4d6dcbae9ff9ee022ca6ae72ec Mon Sep 17 00:00:00 2001 From: Tig Date: Wed, 3 Apr 2024 13:21:36 -0500 Subject: [PATCH] WindowsDriver - added diagnostics. Found issue. Implemented workaround --- Terminal.Gui/ConsoleDrivers/WindowsDriver.cs | 24 +++++++++++++++----- UICatalog/Scenarios/CharacterMap.cs | 13 +---------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs b/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs index b6ccaf9a2..e0e2647e4 100644 --- a/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs +++ b/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs @@ -472,6 +472,7 @@ internal class WindowsConsole [Flags] public enum ButtonState { + NoButtonPressed = 0, Button1Pressed = 1, Button2Pressed = 4, Button3Pressed = 8, @@ -482,6 +483,7 @@ internal class WindowsConsole [Flags] public enum ControlKeyState { + NoControlKeyPressed = 0, RightAltPressed = 1, LeftAltPressed = 2, RightControlPressed = 4, @@ -496,6 +498,7 @@ internal class WindowsConsole [Flags] public enum EventFlags { + NoEvent = 0, MouseMoved = 1, DoubleClick = 2, MouseWheeled = 4, @@ -517,7 +520,7 @@ internal class WindowsConsole [FieldOffset (12)] public EventFlags EventFlags; - public readonly override string ToString () { return $"[Mouse({MousePosition},{ButtonState},{ControlKeyState},{EventFlags}"; } + public readonly override string ToString () { return $"[Mouse{MousePosition},{ButtonState},{ControlKeyState},{EventFlags}]"; } } public struct WindowBufferSizeRecord @@ -1388,7 +1391,7 @@ internal class WindowsDriver : ConsoleDriver case WindowsConsole.EventType.Mouse: MouseEvent me = ToDriverMouse (inputEvent.MouseEvent); - if (me is null) + if (me is null || me.Flags == MouseFlags.None) { break; } @@ -1774,8 +1777,8 @@ internal class WindowsDriver : ConsoleDriver { var mouseFlag = MouseFlags.AllEvents; - //System.Diagnostics.Debug.WriteLine ( - // $"X:{mouseEvent.MousePosition.X};Y:{mouseEvent.MousePosition.Y};ButtonState:{mouseEvent.ButtonState};EventFlags:{mouseEvent.EventFlags}"); + Debug.WriteLine ($"ToDriverMouse: {mouseEvent}"); + //$"X:{mouseEvent.MousePosition.X};Y:{mouseEvent.MousePosition.Y};ButtonState:{mouseEvent.ButtonState};EventFlags:{mouseEvent.EventFlags}"); if (_isButtonDoubleClicked || _isOneFingerDoubleClicked) { @@ -2003,7 +2006,7 @@ internal class WindowsDriver : ConsoleDriver else if (mouseEvent is { ButtonState: 0, EventFlags: 0 }) { // This happens on a double or triple click event. - mouseFlag = 0; + mouseFlag = MouseFlags.None; } mouseFlag = SetControlKeyStates (mouseEvent, mouseFlag); @@ -2129,7 +2132,16 @@ internal class WindowsMainLoop : IMainLoopDriver void IMainLoopDriver.TearDown () { // Eat any outstanding events - //var r = _winConsole.ReadConsoleInput (); + var records = _winConsole.ReadConsoleInput (); + + if (records != null) + { + foreach (var rec in records) + { + Debug.WriteLine ($"Teardown: {rec.ToString ()}"); + Debug.Assert (rec is not { EventType: WindowsConsole.EventType.Mouse, MouseEvent.ButtonState: WindowsConsole.ButtonState.Button1Pressed }); + } + } _inputHandlerTokenSource?.Cancel (); _inputHandlerTokenSource?.Dispose (); diff --git a/UICatalog/Scenarios/CharacterMap.cs b/UICatalog/Scenarios/CharacterMap.cs index bcac93b9b..856df8e03 100644 --- a/UICatalog/Scenarios/CharacterMap.cs +++ b/UICatalog/Scenarios/CharacterMap.cs @@ -883,20 +883,9 @@ internal class CharMap : ScrollView } catch (HttpRequestException e) { - (s as Dialog).Text = e.Message; - - Application.Invoke ( - () => - { - spinner.Visible = false; - errorLabel.Text = e.Message; - errorLabel.ColorScheme = Colors.ColorSchemes ["Error"]; - errorLabel.Visible = true; - } - ); + Application.Invoke (() => waitIndicator.RequestStop ()); } - (s as Dialog)?.RequestStop (); }; Application.Run (waitIndicator); waitIndicator.Dispose ();