mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-30 09:47:58 +01:00
WindowsDriver - added diagnostics. Found issue. Implemented workaround
This commit is contained in:
@@ -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 ();
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
Reference in New Issue
Block a user