Browse Source

Way too big a committ.... but I got carried away.

- Started MouseEventEventArgs -> MouseEvent transition - for OnMouseEvent. Partially fixes #3029.
- Refactored Appliation.OnMouseEvent and View.OnMouseEvent to match design guidelines.
- Re-impleented highlight, enabling extensibility (see Border).
- Beefed up unit tests
Tig 1 year ago
parent
commit
c5b7b084a9
41 changed files with 805 additions and 727 deletions
  1. 25 25
      Terminal.Gui/Application.cs
  2. 2 2
      Terminal.Gui/ConsoleDrivers/ConsoleDriver.cs
  3. 1 1
      Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs
  4. 1 1
      Terminal.Gui/ConsoleDrivers/NetDriver.cs
  5. 9 11
      Terminal.Gui/ConsoleDrivers/WindowsDriver.cs
  6. 22 0
      Terminal.Gui/View/Adornment/Border.cs
  7. 4 1
      Terminal.Gui/View/ViewAdornments.cs
  8. 208 64
      Terminal.Gui/View/ViewMouse.cs
  9. 2 2
      Terminal.Gui/Views/ComboBox.cs
  10. 16 16
      Terminal.Gui/Views/Menu/Menu.cs
  11. 4 4
      Terminal.Gui/Views/Menu/MenuBar.cs
  12. 2 2
      Terminal.Gui/Views/ScrollBarView.cs
  13. 2 2
      Terminal.Gui/Views/ScrollView.cs
  14. 1 1
      Terminal.Gui/Views/TabView.cs
  15. 1 1
      UICatalog/Scenarios/ASCIICustomButton.cs
  16. 1 1
      UICatalog/Scenarios/Adornments.cs
  17. 3 3
      UICatalog/Scenarios/BasicColors.cs
  18. 1 1
      UICatalog/Scenarios/ContextMenus.cs
  19. 27 11
      UICatalog/Scenarios/Mouse.cs
  20. 1 1
      UICatalog/Scenarios/Scrolling.cs
  21. 2 2
      UICatalog/Scenarios/TrueColors.cs
  22. 30 52
      UnitTests/Application/ApplicationTests.cs
  23. 17 38
      UnitTests/Application/MouseTests.cs
  24. 2 10
      UnitTests/Input/EscSeqUtilsTests.cs
  25. 1 1
      UnitTests/Input/ResponderTests.cs
  26. 181 46
      UnitTests/View/MouseTests.cs
  27. 4 4
      UnitTests/View/NavigationTests.cs
  28. 1 1
      UnitTests/View/ViewTests.cs
  29. 3 3
      UnitTests/Views/CheckBoxTests.cs
  30. 2 2
      UnitTests/Views/ColorPickerTests.cs
  31. 27 27
      UnitTests/Views/ComboBoxTests.cs
  32. 19 51
      UnitTests/Views/ContextMenuTests.cs
  33. 1 1
      UnitTests/Views/LabelTests.cs
  34. 10 15
      UnitTests/Views/ListViewTests.cs
  35. 43 59
      UnitTests/Views/MenuBarTests.cs
  36. 8 16
      UnitTests/Views/OverlappedTests.cs
  37. 2 10
      UnitTests/Views/ScrollBarViewTests.cs
  38. 10 28
      UnitTests/Views/TabViewTests.cs
  39. 5 5
      UnitTests/Views/TextFieldTests.cs
  40. 100 202
      UnitTests/Views/ToplevelTests.cs
  41. 4 4
      UnitTests/Views/TreeTableSourceTests.cs

+ 25 - 25
Terminal.Gui/Application.cs

@@ -318,7 +318,7 @@ public static partial class Application
     private static void Driver_SizeChanged (object sender, SizeChangedEventArgs e) { OnSizeChanging (e); }
     private static void Driver_KeyDown (object sender, Key e) { OnKeyDown (e); }
     private static void Driver_KeyUp (object sender, Key e) { OnKeyUp (e); }
-    private static void Driver_MouseEvent (object sender, MouseEventEventArgs e) { OnMouseEvent (e); }
+    private static void Driver_MouseEvent (object sender, MouseEvent e) { OnMouseEvent (e); }
 
     /// <summary>Gets of list of <see cref="ConsoleDriver"/> types that are available.</summary>
     /// <returns></returns>
@@ -1441,12 +1441,12 @@ public static partial class Application
     ///     </para>
     ///     <para>The <see cref="MouseEvent.View"/> will contain the <see cref="View"/> that contains the mouse coordinates.</para>
     /// </remarks>
-    public static event EventHandler<MouseEventEventArgs> MouseEvent;
+    public static event EventHandler<MouseEvent> MouseEvent;
 
     /// <summary>Called when a mouse event occurs. Raises the <see cref="MouseEvent"/> event.</summary>
     /// <remarks>This method can be used to simulate a mouse event, e.g. in unit tests.</remarks>
     /// <param name="a">The mouse event with coordinates relative to the screen.</param>
-    internal static void OnMouseEvent (MouseEventEventArgs a)
+    internal static void OnMouseEvent (MouseEvent mouseEvent)
     {
         if (IsMouseDisabled)
         {
@@ -1454,16 +1454,16 @@ public static partial class Application
         }
 
         // TODO: In PR #3273, FindDeepestView will return adornments. Update logic below to fix adornment mouse handling
-        var view = View.FindDeepestView (Current, a.MouseEvent.X, a.MouseEvent.Y);
+        var view = View.FindDeepestView (Current, mouseEvent.X, mouseEvent.Y);
 
         if (view is { })
         {
-            a.MouseEvent.View = view;
+            mouseEvent.View = view;
         }
 
-        MouseEvent?.Invoke (null, new (a.MouseEvent));
+        MouseEvent?.Invoke (null, mouseEvent);
 
-        if (a.MouseEvent.Handled)
+        if (mouseEvent.Handled)
         {
             return;
         }
@@ -1472,25 +1472,25 @@ public static partial class Application
         {
             // If the mouse is grabbed, send the event to the view that grabbed it.
             // The coordinates are relative to the Bounds of the view that grabbed the mouse.
-            Point boundsLoc = MouseGrabView.ScreenToBounds (a.MouseEvent.X, a.MouseEvent.Y);
+            Point boundsLoc = MouseGrabView.ScreenToBounds (mouseEvent.X, mouseEvent.Y);
 
             var viewRelativeMouseEvent = new MouseEvent
             {
                 X = boundsLoc.X,
                 Y = boundsLoc.Y,
-                Flags = a.MouseEvent.Flags,
-                ScreenPosition = new (a.MouseEvent.X, a.MouseEvent.Y),
+                Flags = mouseEvent.Flags,
+                ScreenPosition = new (mouseEvent.X, mouseEvent.Y),
                 View = MouseGrabView
             };
 
             if (MouseGrabView.Bounds.Contains (viewRelativeMouseEvent.X, viewRelativeMouseEvent.Y) is false)
             {
                 // The mouse has moved outside the bounds of the view that grabbed the mouse
-                _mouseEnteredView?.OnMouseLeave (a.MouseEvent);
+                _mouseEnteredView?.OnMouseLeave (mouseEvent);
             }
 
             //System.Diagnostics.Debug.WriteLine ($"{nme.Flags};{nme.X};{nme.Y};{mouseGrabView}");
-            if (MouseGrabView?.OnMouseEvent (viewRelativeMouseEvent) == true)
+            if (MouseGrabView?.NewMouseEvent (viewRelativeMouseEvent) == true)
             {
                 return;
             }
@@ -1511,13 +1511,13 @@ public static partial class Application
             if ((view is null || view == OverlappedTop)
                 && Current is { Modal: false }
                 && OverlappedTop != null
-                && a.MouseEvent.Flags != MouseFlags.ReportMousePosition
-                && a.MouseEvent.Flags != 0)
+                && mouseEvent.Flags != MouseFlags.ReportMousePosition
+                && mouseEvent.Flags != 0)
             {
                 // This occurs when there are multiple overlapped "tops"
                 // E.g. "Mdi" - in the Background Worker Scenario
-                View? top = FindDeepestTop (Top, a.MouseEvent.X, a.MouseEvent.Y);
-                view = View.FindDeepestView (top, a.MouseEvent.X, a.MouseEvent.Y);
+                View? top = FindDeepestTop (Top, mouseEvent.X, mouseEvent.Y);
+                view = View.FindDeepestView (top, mouseEvent.X, mouseEvent.Y);
 
                 if (view is { } && view != OverlappedTop && top != Current)
                 {
@@ -1535,27 +1535,27 @@ public static partial class Application
 
         if (view is Adornment adornment)
         {
-            Point frameLoc = adornment.ScreenToFrame (a.MouseEvent.X, a.MouseEvent.Y);
+            Point frameLoc = adornment.ScreenToFrame (mouseEvent.X, mouseEvent.Y);
 
             me = new ()
             {
                 X = frameLoc.X,
                 Y = frameLoc.Y,
-                Flags = a.MouseEvent.Flags,
-                ScreenPosition = new (a.MouseEvent.X, a.MouseEvent.Y),
+                Flags = mouseEvent.Flags,
+                ScreenPosition = new (mouseEvent.X, mouseEvent.Y),
                 View = view
             };
         }
-        else if (view.BoundsToScreen (view.Bounds).Contains (a.MouseEvent.X, a.MouseEvent.Y))
+        else if (view.BoundsToScreen (view.Bounds).Contains (mouseEvent.X, mouseEvent.Y))
         {
-            Point boundsPoint = view.ScreenToBounds (a.MouseEvent.X, a.MouseEvent.Y);
+            Point boundsPoint = view.ScreenToBounds (mouseEvent.X, mouseEvent.Y);
 
             me = new ()
             {
                 X = boundsPoint.X,
                 Y = boundsPoint.Y,
-                Flags = a.MouseEvent.Flags,
-                ScreenPosition = new (a.MouseEvent.X, a.MouseEvent.Y),
+                Flags = mouseEvent.Flags,
+                ScreenPosition = new (mouseEvent.X, mouseEvent.Y),
                 View = view
             };
         }
@@ -1577,7 +1577,7 @@ public static partial class Application
             _mouseEnteredView = view;
         }
 
-        if (!view.WantMousePositionReports && a.MouseEvent.Flags == MouseFlags.ReportMousePosition)
+        if (!view.WantMousePositionReports && mouseEvent.Flags == MouseFlags.ReportMousePosition)
         {
             return;
         }
@@ -1586,7 +1586,7 @@ public static partial class Application
 
         //Debug.WriteLine ($"OnMouseEvent: ({a.MouseEvent.X},{a.MouseEvent.Y}) - {a.MouseEvent.Flags}");
 
-        if (view.OnMouseEvent (me))
+        if (view.NewMouseEvent (me) == false)
         {
             // Should we bubble up the event, if it is not handled?
             //return;

+ 2 - 2
Terminal.Gui/ConsoleDrivers/ConsoleDriver.cs

@@ -538,11 +538,11 @@ public abstract class ConsoleDriver
     public void OnKeyUp (Key a) { KeyUp?.Invoke (this, a); }
 
     /// <summary>Event fired when a mouse event occurs.</summary>
-    public event EventHandler<MouseEventEventArgs> MouseEvent;
+    public event EventHandler<MouseEvent> MouseEvent;
 
     /// <summary>Called when a mouse event occurs. Fires the <see cref="MouseEvent"/> event.</summary>
     /// <param name="a"></param>
-    public void OnMouseEvent (MouseEventEventArgs a) { MouseEvent?.Invoke (this, a); }
+    public void OnMouseEvent (MouseEvent a) { MouseEvent?.Invoke (this, a); }
 
     /// <summary>Simulates a key press.</summary>
     /// <param name="keyChar">The key character.</param>

+ 1 - 1
Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs

@@ -812,7 +812,7 @@ internal class CursesDriver : ConsoleDriver
         var me = new MouseEvent { Flags = mouseFlag, X = pos.X, Y = pos.Y };
         Debug.WriteLine ($"CursesDriver: ({me.X},{me.Y}) - {me.Flags}");
 
-        OnMouseEvent (new MouseEventEventArgs (me));
+        OnMouseEvent (me);
     }
 
     #region Color Handling

+ 1 - 1
Terminal.Gui/ConsoleDrivers/NetDriver.cs

@@ -1138,7 +1138,7 @@ internal class NetDriver : ConsoleDriver
             case EventType.Mouse:
                 MouseEvent me = ToDriverMouse (inputEvent.MouseEvent);
                 Debug.WriteLine ($"NetDriver: ({me.X},{me.Y}) - {me.Flags}");
-                OnMouseEvent (new MouseEventEventArgs (me));
+                OnMouseEvent (me);
 
                 break;
             case EventType.WindowSize:

+ 9 - 11
Terminal.Gui/ConsoleDrivers/WindowsDriver.cs

@@ -1396,18 +1396,16 @@ internal class WindowsDriver : ConsoleDriver
                     break;
                 }
 
-                OnMouseEvent (new MouseEventEventArgs (me));
+                OnMouseEvent (me);
 
                 if (_processButtonClick)
                 {
-                    OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = me.X,
-                                                               Y = me.Y,
-                                                               Flags = ProcessButtonClick (inputEvent.MouseEvent)
-                                                           }));
+                    OnMouseEvent (new ()
+                    {
+                        X = me.X,
+                        Y = me.Y,
+                        Flags = ProcessButtonClick (inputEvent.MouseEvent)
+                    });
                 }
 
                 break;
@@ -1715,7 +1713,7 @@ internal class WindowsDriver : ConsoleDriver
     {
         // When a user presses-and-holds, start generating pressed events every `startDelay`
         // After `iterationsUntilFast` iterations, speed them up to `fastDelay` ms
-        const int startDelay = 50;
+        const int startDelay = 500;
         const int iterationsUntilFast = 4;
         const int fastDelay = 50;
 
@@ -1744,7 +1742,7 @@ internal class WindowsDriver : ConsoleDriver
             //Debug.WriteLine($"ProcessContinuousButtonPressedAsync: {view}");
             if (_isButtonPressed && (mouseFlag & MouseFlags.ReportMousePosition) == 0)
             {
-                Application.Invoke (() => OnMouseEvent (new MouseEventEventArgs (me)));
+                Application.Invoke (() => OnMouseEvent (me));
             }
         }
     }

+ 22 - 0
Terminal.Gui/View/Adornment/Border.cs

@@ -56,6 +56,9 @@ public class Border : Adornment
         Parent = parent;
         Application.GrabbingMouse += Application_GrabbingMouse;
         Application.UnGrabbingMouse += Application_UnGrabbingMouse;
+
+        EnablingHighlight += Border_EnablingHighlight;
+        DisablingHighlight += Border_DisablingHighlight;
     }
 
 #if SUBVIEW_BASED_BORDER
@@ -187,6 +190,23 @@ public class Border : Adornment
 
     #region Mouse Support
 
+    private LineStyle _savedHighlightLineStyle;
+
+    private void Border_EnablingHighlight (object sender, System.ComponentModel.CancelEventArgs e)
+    {
+        _savedHighlightLineStyle = Parent?.BorderStyle ?? LineStyle;
+        LineStyle = LineStyle.Heavy;
+        Parent?.SetNeedsDisplay ();
+        e.Cancel = true;
+    }
+
+    private void Border_DisablingHighlight (object sender, System.ComponentModel.CancelEventArgs e)
+    {
+        LineStyle = _savedHighlightLineStyle;
+        Parent?.SetNeedsDisplay ();
+        e.Cancel = true;
+    }
+
     private Point? _dragPosition;
     private Point _startGrabPoint;
 
@@ -222,6 +242,7 @@ public class Border : Adornment
                 _startGrabPoint = new (mouseEvent.X + Frame.X, mouseEvent.Y + Frame.Y);
                 _dragPosition = new (mouseEvent.X, mouseEvent.Y);
                 Application.GrabMouse (this);
+                EnableHighlight ();
             }
 
             return true;
@@ -265,6 +286,7 @@ public class Border : Adornment
         {
             _dragPosition = null;
             Application.UngrabMouse ();
+            DisableHighlight();
 
             return true;
         }

+ 4 - 1
Terminal.Gui/View/ViewAdornments.cs

@@ -99,7 +99,10 @@ public partial class View
 
             if (value != LineStyle.None)
             {
-                Border.Thickness = new (1);
+                if (Border.Thickness == Thickness.Empty)
+                {
+                    Border.Thickness = new (1);
+                }
             }
             else
             {

+ 208 - 64
Terminal.Gui/View/ViewMouse.cs

@@ -1,4 +1,7 @@
-namespace Terminal.Gui;
+using System.ComponentModel;
+using System.Diagnostics;
+
+namespace Terminal.Gui;
 
 public partial class View
 {
@@ -77,18 +80,31 @@ public partial class View
     /// <summary>Event fired when the mouse leaves the View's <see cref="Bounds"/>.</summary>
     public event EventHandler<MouseEventEventArgs> MouseLeave;
 
-    [CanBeNull]
-    private ColorScheme _savedColorScheme;
-
-    /// <summary>Called when a mouse event occurs within the view's <see cref="Bounds"/>.</summary>
+    /// <summary>
+    ///     Processes a <see cref="MouseEvent"/>. This method is called by <see cref="Application.OnMouseEvent"/> when a mouse
+    ///     event occurs.
+    /// </summary>
     /// <remarks>
     ///     <para>
-    ///         The coordinates are relative to <see cref="View.Bounds"/>.
+    ///         A view must be both enabled and visible to receive mouse events.
+    ///     </para>
+    ///     <para>
+    ///         This method calls <see cref="OnMouseEvent"/> to process the event. If the event is not handled, and one of the
+    ///         mouse buttons was clicked, it calls <see cref="OnMouseClick"/> to process the click.
+    ///     </para>
+    ///     <para>
+    ///         If <see cref="HighlightOnPress"/> is <see langword="true"/>, the view will be highlighted when the mouse is
+    ///         pressed.
+    ///         See <see cref="EnableHighlight"/> and <see cref="DisableHighlight"/> for more information.
+    ///     </para>
+    ///     <para>
+    ///         If <see cref="WantContinuousButtonPressed"/> is <see langword="true"/>, the <see cref="OnMouseClick"/> event
+    ///         will be invoked repeatedly while the button is pressed.
     ///     </para>
     /// </remarks>
     /// <param name="mouseEvent"></param>
-    /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
-    protected internal virtual bool OnMouseEvent (MouseEvent mouseEvent)
+    /// <returns><see langword="true"/> if the event was handled, <see langword="false"/> otherwise.</returns>
+    public bool? NewMouseEvent (MouseEvent mouseEvent)
     {
         if (!Enabled)
         {
@@ -101,23 +117,67 @@ public partial class View
             return false;
         }
 
-        var args = new MouseEventEventArgs (mouseEvent);
+        if (OnMouseEvent (mouseEvent))
+        {
+            // Technically mouseEvent.Handled should already be true if implementers of OnMouseEvent
+            // follow the rules. But we'll update it just in case.
+            return mouseEvent.Handled = true;
+        }
+
+        if ((HighlightOnPress || WantContinuousButtonPressed) && Highlight (mouseEvent))
+        {
+            Debug.Assert (mouseEvent.Handled);
+
+            return mouseEvent.Handled;
+        }
+
+        if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked)
+            || mouseEvent.Flags.HasFlag (MouseFlags.Button2Clicked)
+            || mouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked)
+            || mouseEvent.Flags.HasFlag (MouseFlags.Button4Clicked))
+        {
+            return OnMouseClick (new (mouseEvent));
+        }
 
-        // Default behavior is to invoke Accept (via HotKey) on clicked.
-        if (
-            // !WantContinuousButtonPressed &&
-            Application.MouseGrabView != this
+        return false;
+    }
+
+    /// <summary>
+    ///     Highlight the view when the mouse is pressed.
+    /// </summary>
+    /// <remarks>
+    ///     <para>
+    ///         Set <see cref="HighlightOnPress"/> to <see langword="true"/> to have the view highlighted when the mouse is
+    ///         pressed.
+    ///     </para>
+    ///     <para>
+    ///         Calls <see cref="OnEnablingHighlight"/> which fires the <see cref="EnablingHighlight"/> event.
+    ///     </para>
+    ///     <para>
+    ///         Calls <see cref="OnDisablingHighlight"/> which fires the <see cref="DisablingHighlight"/> event.
+    ///     </para>
+    /// </remarks>
+    /// <param name="mouseEvent"></param>
+    /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
+    private bool Highlight (MouseEvent mouseEvent)
+    {
+        if (Application.MouseGrabView == this
             && (mouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked)
                 || mouseEvent.Flags.HasFlag (MouseFlags.Button2Clicked)
                 || mouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked)
                 || mouseEvent.Flags.HasFlag (MouseFlags.Button4Clicked)))
-        { 
-            return OnMouseClick (args);
-        }
-
-        if (!HighlightOnPress)
         {
-            return false;
+            // We're grabbed. Clicked event comes after the last Release. This is our signal to ungrab
+            Application.UngrabMouse ();
+            DisableHighlight ();
+
+            // If mouse is still in bounds, click
+            if (!WantContinuousButtonPressed && Bounds.Contains (mouseEvent.X, mouseEvent.Y))
+            {
+                return OnMouseClick (new (mouseEvent));
+            }
+
+            return mouseEvent.Handled = true;
         }
 
         if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed)
@@ -125,47 +185,34 @@ public partial class View
             || mouseEvent.Flags.HasFlag (MouseFlags.Button3Pressed)
             || mouseEvent.Flags.HasFlag (MouseFlags.Button4Pressed))
         {
-            // If WantContinuousButtonPressed is true, and this is not the first pressed event,
-            // invoke Accept (via HotKey)
-            if (WantContinuousButtonPressed && Application.MouseGrabView == this)
-            {
-                return OnMouseClick (args);
-            }
-
-            // The first time we get pressed event, grab the mouse and invert the colors
+            // The first time we get pressed event, grab the mouse and set focus
             if (Application.MouseGrabView != this)
             {
                 Application.GrabMouse (this);
 
-                if (HighlightOnPress && ColorScheme is { })
-                {
-                    _savedColorScheme = ColorScheme;
-                    if (CanFocus)
-                    {
-                        // TODO: Make the inverted color configurable
-                        var cs = new ColorScheme (ColorScheme)
-                        {
-                            Focus = new (ColorScheme.Normal.Foreground, ColorScheme.Focus.Background)
-                        };
-                        ColorScheme = cs;
-                    }
-                    else
-                    {
-                        var cs = new ColorScheme (ColorScheme)
-                        {
-                            Normal = new (ColorScheme.Focus.Background, ColorScheme.Normal.Foreground)
-                        };
-                        ColorScheme = cs;
-                    }
-                }
-
                 if (CanFocus)
                 {
                     // Set the focus, but don't invoke Accept
                     SetFocus ();
                 }
             }
-            args.Handled = true;
+
+            if (Bounds.Contains (mouseEvent.X, mouseEvent.Y))
+            {
+                EnableHighlight ();
+            }
+            else
+            {
+                DisableHighlight ();
+            }
+
+            if (WantContinuousButtonPressed && Application.MouseGrabView == this)
+            {
+                // If this is not the first pressed event, click
+                return OnMouseClick (new (mouseEvent));
+            }
+
+            return mouseEvent.Handled = true;
         }
 
         if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Released)
@@ -173,30 +220,127 @@ public partial class View
             || mouseEvent.Flags.HasFlag (MouseFlags.Button3Released)
             || mouseEvent.Flags.HasFlag (MouseFlags.Button4Released))
         {
-
             if (Application.MouseGrabView == this)
             {
-                // When the mouse is released, if WantContinuousButtonPressed is set, invoke Accept one last time.
-                //if (WantContinuousButtonPressed)
-                {
-                    OnMouseClick (args);
-                }
+                DisableHighlight ();
+            }
 
-                Application.UngrabMouse ();
+            return mouseEvent.Handled = true;
+        }
+
+        return mouseEvent.Handled;
+    }
+
+    [CanBeNull]
+    private ColorScheme _savedHighlightColorScheme;
+
+    /// <summary>
+    ///     Enables the highlight for the view. Called from OnMouseEvent.
+    /// </summary>
+    public void EnableHighlight ()
+    {
+        if (OnEnablingHighlight () == true)
+        {
+            return;
+        }
+
+        if (_savedHighlightColorScheme is null && ColorScheme is { })
+        {
+            _savedHighlightColorScheme ??= ColorScheme;
 
-                if (HighlightOnPress && _savedColorScheme is { })
+            if (CanFocus)
+            {
+                // TODO: Make the inverted color configurable
+                var cs = new ColorScheme (ColorScheme)
                 {
-                    ColorScheme = _savedColorScheme;
-                    _savedColorScheme = null;
-                }
+                    // For Buttons etc...
+                    Focus = new (ColorScheme.Normal.Foreground, ColorScheme.Focus.Background),
+
+                    // For Adornments
+                    Normal = new (ColorScheme.Focus.Foreground, ColorScheme.Normal.Background)
+                };
+                ColorScheme = cs;
+            }
+            else
+            {
+                var cs = new ColorScheme (ColorScheme)
+                {
+                    // For Buttons etc... that can't focus (like up/down).
+                    Normal = new (ColorScheme.Focus.Background, ColorScheme.Normal.Foreground)
+                };
+                ColorScheme = cs;
             }
-            args.Handled = true;
         }
+    }
+
+    /// <summary>
+    ///     Fired when the view is highlighted. Set <see cref="CancelEventArgs.Cancel"/> to <see langword="true"/>
+    ///     to implement a custom highlight scheme or prevent the view from being highlighted.
+    /// </summary>
+    public event EventHandler<CancelEventArgs> EnablingHighlight;
+
+    /// <summary>
+    ///     Called when the view is to be highlighted.
+    /// </summary>
+    /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
+    protected virtual bool? OnEnablingHighlight ()
+    {
+        CancelEventArgs args = new ();
+        EnablingHighlight?.Invoke (this, args);
 
-        if (args.Handled != true)
+        return args.Cancel;
+    }
+
+    /// <summary>
+    ///     Disables the highlight for the view. Called from OnMouseEvent.
+    /// </summary>
+    public void DisableHighlight ()
+    {
+        if (OnDisablingHighlight () == true)
+        {
+            return;
+        }
+
+        // Unhighlight
+        if (_savedHighlightColorScheme is { })
         {
-            MouseEvent?.Invoke (this, args);
+            ColorScheme = _savedHighlightColorScheme;
+            _savedHighlightColorScheme = null;
         }
+    }
+
+    /// <summary>
+    ///     Fired when the view is no longer to be highlighted. Set <see cref="CancelEventArgs.Cancel"/> to
+    ///     <see langword="true"/>
+    ///     to implement a custom highlight scheme or prevent the view from being highlighted.
+    /// </summary>
+    public event EventHandler<CancelEventArgs> DisablingHighlight;
+
+    /// <summary>
+    ///     Called when the view is no longer to be highlighted.
+    /// </summary>
+    /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
+    protected virtual bool? OnDisablingHighlight ()
+    {
+        CancelEventArgs args = new ();
+        DisablingHighlight?.Invoke (this, args);
+
+        return args.Cancel;
+    }
+
+    /// <summary>Called when a mouse event occurs within the view's <see cref="Bounds"/>.</summary>
+    /// <remarks>
+    ///     <para>
+    ///         The coordinates are relative to <see cref="View.Bounds"/>.
+    ///     </para>
+    /// </remarks>
+    /// <param name="mouseEvent"></param>
+    /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
+    protected internal virtual bool OnMouseEvent (MouseEvent mouseEvent)
+    {
+        var args = new MouseEventEventArgs (mouseEvent);
+
+        MouseEvent?.Invoke (this, args);
 
         return args.Handled;
     }

+ 2 - 2
Terminal.Gui/Views/ComboBox.cs

@@ -264,7 +264,7 @@ public class ComboBox : View
                 FocusSelectedItem ();
             }
 
-            return true;
+            return me.Handled = true;
         }
 
         if (me.Flags == MouseFlags.Button1Pressed)
@@ -274,7 +274,7 @@ public class ComboBox : View
                 _search.SetFocus ();
             }
 
-            return true;
+            return me.Handled = true;
         }
 
         return false;

+ 16 - 16
Terminal.Gui/Views/Menu/Menu.cs

@@ -712,9 +712,9 @@ internal sealed class Menu : View
         }
     }
 
-    private void Application_RootMouseEvent (object sender, MouseEventEventArgs a)
+    private void Application_RootMouseEvent (object sender, MouseEvent a)
     {
-        if (a.MouseEvent.View is { } and (MenuBar or not Menu))
+        if (a.View is { } and (MenuBar or not Menu))
         {
             return;
         }
@@ -724,21 +724,21 @@ internal sealed class Menu : View
             throw new InvalidOperationException ("This shouldn't running on a invisible menu!");
         }
 
-        View view = a.MouseEvent.View ?? this;
+        View view = a.View ?? this;
 
-        Point boundsPoint = view.ScreenToBounds (a.MouseEvent.X, a.MouseEvent.Y);
+        Point boundsPoint = view.ScreenToBounds (a.X, a.Y);
         var me = new MouseEvent
         {
             X = boundsPoint.X,
             Y = boundsPoint.Y,
-            Flags = a.MouseEvent.Flags,
-            ScreenPosition = new (a.MouseEvent.X, a.MouseEvent.Y),
+            Flags = a.Flags,
+            ScreenPosition = new (a.X, a.Y),
             View = view
         };
 
-        if (view.OnMouseEvent (me) || a.MouseEvent.Flags == MouseFlags.Button1Pressed || a.MouseEvent.Flags == MouseFlags.Button1Released)
+        if (view.NewMouseEvent (me) == true || a.Flags == MouseFlags.Button1Pressed || a.Flags == MouseFlags.Button1Released)
         {
-            a.MouseEvent.Handled = true;
+            a.Handled = true;
         }
     }
 
@@ -1189,12 +1189,12 @@ internal sealed class Menu : View
 
             if (me.Y < 0)
             {
-                return true;
+                return me.Handled = true;
             }
 
             if (me.Y >= _barItems.Children.Length)
             {
-                return true;
+                return me.Handled = true;
             }
 
             MenuItem item = _barItems.Children [me.Y];
@@ -1206,13 +1206,13 @@ internal sealed class Menu : View
 
             if (disabled)
             {
-                return true;
+                return me.Handled = true;
             }
 
             _currentChild = me.Y;
             RunSelected ();
 
-            return true;
+            return me.Handled = true;
         }
 
         if (me.Flags != MouseFlags.Button1Pressed
@@ -1229,14 +1229,14 @@ internal sealed class Menu : View
 
             if (me.Y < 0 || me.Y >= _barItems.Children.Length)
             {
-                return true;
+                return me.Handled = true;
             }
 
             MenuItem item = _barItems.Children [me.Y];
 
             if (item is null)
             {
-                return true;
+                return me.Handled = true;
             }
 
             if (item?.IsEnabled () != true)
@@ -1254,12 +1254,12 @@ internal sealed class Menu : View
                 SetNeedsDisplay ();
                 SetParentSetNeedsDisplay ();
 
-                return true;
+                return me.Handled = true;
             }
 
             _host.OnMenuOpened ();
 
-            return true;
+            return me.Handled = true;
         }
     }
 

+ 4 - 4
Terminal.Gui/Views/Menu/MenuBar.cs

@@ -1715,7 +1715,7 @@ public class MenuBar : View
                         {
                             if (!CloseMenu (true, false))
                             {
-                                return true;
+                                return me.Handled = true;
                             }
 
                             Activate (i);
@@ -1733,7 +1733,7 @@ public class MenuBar : View
                         }
                     }
 
-                    return true;
+                    return me.Handled = true;
                 }
 
                 if (i == Menus.Length - 1 && me.Flags == MouseFlags.Button1Clicked)
@@ -1742,7 +1742,7 @@ public class MenuBar : View
                     {
                         CloseAllMenus ();
 
-                        return true;
+                        return me.Handled = true;
                     }
                 }
 
@@ -1804,7 +1804,7 @@ public class MenuBar : View
                         nme = new () { X = me.X + current.Frame.X, Y = 0, Flags = me.Flags, View = v };
                     }
 
-                    v.OnMouseEvent (nme);
+                    v.NewMouseEvent (nme);
 
                     return false;
                 }

+ 2 - 2
Terminal.Gui/Views/ScrollBarView.cs

@@ -325,7 +325,7 @@ public class ScrollBarView : View
                 || mouseEvent.Flags == MouseFlags.WheeledRight
                 || mouseEvent.Flags == MouseFlags.WheeledLeft))
         {
-            return Host.OnMouseEvent (mouseEvent);
+            return Host.NewMouseEvent (mouseEvent) == true;
         }
 
         if (mouseEvent.Flags == MouseFlags.Button1Pressed && location == 0)
@@ -800,7 +800,7 @@ public class ScrollBarView : View
             || me.MouseEvent.Flags == MouseFlags.WheeledRight
             || me.MouseEvent.Flags == MouseFlags.WheeledLeft)
         {
-            OnMouseEvent (me.MouseEvent);
+            NewMouseEvent (me.MouseEvent);
         }
         else if (me.MouseEvent.Flags == MouseFlags.Button1Clicked)
         {

+ 2 - 2
Terminal.Gui/Views/ScrollView.cs

@@ -434,11 +434,11 @@ public class ScrollView : View
         }
         else if (me.X == _vertical.Frame.X && ShowVerticalScrollIndicator)
         {
-            _vertical.OnMouseEvent (me);
+            _vertical.NewMouseEvent (me);
         }
         else if (me.Y == _horizontal.Frame.Y && ShowHorizontalScrollIndicator)
         {
-            _horizontal.OnMouseEvent (me);
+            _horizontal.NewMouseEvent (me);
         }
         else if (IsOverridden (me.View, "OnMouseEvent"))
         {

+ 1 - 1
Terminal.Gui/Views/TabView.cs

@@ -533,7 +533,7 @@ public class TabView : View
         return Style.ShowTopLine ? 3 : 2;
     }
 
-    private void Tab_MouseClick (object sender, MouseEventEventArgs e) { e.Handled = _tabsBar.OnMouseEvent (e.MouseEvent); }
+    private void Tab_MouseClick (object sender, MouseEventEventArgs e) { e.Handled = _tabsBar.NewMouseEvent (e.MouseEvent) == true; }
 
     private void UnSetCurrentTabs ()
     {

+ 1 - 1
UICatalog/Scenarios/ASCIICustomButton.cs

@@ -134,7 +134,7 @@ public class ASCIICustomButtonTest : Scenario
         }
 
         public event Action<ASCIICustomButton> PointerEnter;
-        private void This_MouseClick (object sender, MouseEventEventArgs obj) { OnMouseEvent (obj.MouseEvent); }
+        private void This_MouseClick (object sender, MouseEventEventArgs obj) { NewMouseEvent (obj.MouseEvent); }
     }
 
     public class ScrollViewTestWindow : Window

+ 1 - 1
UICatalog/Scenarios/Adornments.cs

@@ -85,7 +85,7 @@ public class Adornments : Scenario
         view.X = 36;
         view.Y = 0;
         view.Width = Dim.Percent (60);
-        view.Height = Dim.Percent (80);
+        view.Height = Dim.Percent (80); 
 
         editor.Initialized += (s, e) => { editor.ViewToEdit = view; };
 

+ 3 - 3
UICatalog/Scenarios/BasicColors.cs

@@ -85,10 +85,10 @@ public class BasicColors : Scenario
 
         Application.MouseEvent += (s, e) =>
                                   {
-                                      if (e.MouseEvent.View != null)
+                                      if (e.View != null)
                                       {
-                                          Color fore = e.MouseEvent.View.GetNormalColor ().Foreground;
-                                          Color back = e.MouseEvent.View.GetNormalColor ().Background;
+                                          Color fore = e.View.GetNormalColor ().Foreground;
+                                          Color back = e.View.GetNormalColor ().Background;
 
                                           lblForeground.Text =
                                               $"#{fore.R:X2}{fore.G:X2}{fore.B:X2} {fore.GetClosestNamedColor ()} ";

+ 1 - 1
UICatalog/Scenarios/ContextMenus.cs

@@ -74,7 +74,7 @@ public class ContextMenus : Scenario
 
         Application.MouseEvent += ApplicationMouseEvent;
 
-        void ApplicationMouseEvent (object sender, MouseEventEventArgs a) { mousePos = new Point (a.MouseEvent.X, a.MouseEvent.Y); }
+        void ApplicationMouseEvent (object sender, MouseEvent a) { mousePos = new Point (a.X, a.Y); }
 
         Win.WantMousePositionReports = true;
 

+ 27 - 11
UICatalog/Scenarios/Mouse.cs

@@ -58,10 +58,10 @@ public class Mouse : Scenario
 
         win.Add (ml);
 
-        CheckBox cbWantContinuousPresses = new CheckBox ()
+        CheckBox cbWantContinuousPresses = new ()
         {
             X = Pos.Right (filterSlider),
-            Y = Pos.Bottom (ml) + 1,
+            Y = Pos.Bottom (ml),
             Title = "_Want Continuous Button Pressed",
         };
         cbWantContinuousPresses.Toggled += (s, e) =>
@@ -70,11 +70,23 @@ public class Mouse : Scenario
         };
 
         win.Add (cbWantContinuousPresses);
+        CheckBox cbHighlightOnPress = new ()
+        {
+            X = Pos.Right (filterSlider),
+            Y = Pos.Bottom (cbWantContinuousPresses),
+            Title = "_Highlight on Press",
+        };
+        cbHighlightOnPress.Toggled += (s, e) =>
+                                           {
+                                               win.HighlightOnPress = !win.HighlightOnPress;
+                                           };
+
+        win.Add (cbHighlightOnPress);
 
         var demo = new MouseDemo ()
         {
             X = Pos.Right (filterSlider),
-            Y = Pos.Bottom (cbWantContinuousPresses) + 1,
+            Y = Pos.Bottom (cbHighlightOnPress),
             Width = 20,
             Height = 3,
             Text = "Enter/Leave Demo",
@@ -105,17 +117,15 @@ public class Mouse : Scenario
 
         Application.MouseEvent += (sender, a) =>
                                   {
-                                      var i = filterSlider.Options.FindIndex (o => o.Data == a.MouseEvent.Flags);
+                                      var i = filterSlider.Options.FindIndex (o => o.Data == a.Flags);
                                       if (filterSlider.GetSetOptions().Contains(i))
                                       {
-                                          ml.Text = $"MouseEvent: ({a.MouseEvent.X},{a.MouseEvent.Y}) - {a.MouseEvent.Flags} {count}";
-                                          appLogList.Add ($"({a.MouseEvent.X},{a.MouseEvent.Y}) - {a.MouseEvent.Flags} {count++}");
+                                          ml.Text = $"MouseEvent: ({a.X},{a.Y}) - {a.Flags} {count}";
+                                          appLogList.Add ($"({a.X},{a.Y}) - {a.Flags} {count++}");
                                           appLog.MoveDown ();
-                                          }
+                                      }
                                   };
 
-
-
         label = new Label ()
         {
             Text = "_Window Events:",
@@ -137,13 +147,19 @@ public class Mouse : Scenario
         clearButton.Accept += (s, e) =>
                               {
                                   appLogList.Clear ();
+                                  appLog.SetSource (appLogList);
                                   winLogList.Clear ();
+                                  winLog.SetSource(winLogList);
                               };
 
         win.MouseEvent += (sender, a) =>
                           {
-                              winLogList.Add ($"MouseEvent: ({a.MouseEvent.X},{a.MouseEvent.Y}) - {a.MouseEvent.Flags} {count++}");
-                              winLog.MoveDown ();
+                              var i = filterSlider.Options.FindIndex (o => o.Data == a.MouseEvent.Flags);
+                              if (filterSlider.GetSetOptions ().Contains (i))
+                              {
+                                  winLogList.Add ($"MouseEvent: ({a.MouseEvent.X},{a.MouseEvent.Y}) - {a.MouseEvent.Flags} {count++}");
+                                  winLog.MoveDown ();
+                              }
                           };
         win.MouseClick += (sender, a) =>
                           {

+ 1 - 1
UICatalog/Scenarios/Scrolling.cs

@@ -251,7 +251,7 @@ public class Scrolling : Scenario
             Text = "Mouse: "
         };
         Win.Add (mousePos);
-        Application.MouseEvent += (sender, a) => { mousePos.Text = $"Mouse: ({a.MouseEvent.X},{a.MouseEvent.Y}) - {a.MouseEvent.Flags} {count++}"; };
+        Application.MouseEvent += (sender, a) => { mousePos.Text = $"Mouse: ({a.X},{a.Y}) - {a.Flags} {count++}"; };
 
         var progress = new ProgressBar { X = Pos.Right (scrollView) + 1, Y = Pos.AnchorEnd (2), Width = 50 };
         Win.Add (progress);

+ 2 - 2
UICatalog/Scenarios/TrueColors.cs

@@ -76,9 +76,9 @@ public class TrueColors : Scenario
 
         Application.MouseEvent += (s, e) =>
                                   {
-                                      if (e.MouseEvent.View != null)
+                                      if (e.View != null)
                                       {
-                                          Attribute normal = e.MouseEvent.View.GetNormalColor ();
+                                          Attribute normal = e.View.GetNormalColor ();
                                           lblRed.Text = normal.Foreground.R.ToString ();
                                           lblGreen.Text = normal.Foreground.G.ToString ();
                                           lblBlue.Text = normal.Foreground.B.ToString ();

+ 30 - 52
UnitTests/Application/ApplicationTests.cs

@@ -41,9 +41,9 @@ public class ApplicationTests
     {
         Assert.Null (Application.Top);
         Application.Begin (new ());
-        Assert.Equal (new Rectangle (0, 0, 80, 25), Application.Top.Frame);
+        Assert.Equal (new (0, 0, 80, 25), Application.Top.Frame);
         ((FakeDriver)Application.Driver).SetBufferSize (5, 5);
-        Assert.Equal (new Rectangle (0, 0, 5, 5), Application.Top.Frame);
+        Assert.Equal (new (0, 0, 5, 5), Application.Top.Frame);
     }
 
     [Fact]
@@ -62,10 +62,10 @@ public class ApplicationTests
 
         Assert.Null (rs.Toplevel);
 
-        var top = Application.Top;
+        Toplevel top = Application.Top;
 
 #if DEBUG_IDISPOSABLE
-        var exception = Record.Exception (() => Shutdown ());
+        Exception exception = Record.Exception (() => Shutdown ());
         Assert.NotNull (exception);
         Assert.False (top.WasDisposed);
         top.Dispose ();
@@ -130,7 +130,7 @@ public class ApplicationTests
         var driver = (ConsoleDriver)Activator.CreateInstance (driverType);
         Application.Init (driverName: driverType.Name);
         Assert.NotNull (Application.Driver);
-        Assert.NotEqual(driver, Application.Driver);
+        Assert.NotEqual (driver, Application.Driver);
         Assert.Equal (driverType, Application.Driver.GetType ());
         Shutdown ();
     }
@@ -212,7 +212,7 @@ public class ApplicationTests
         Application._mainThreadId = 1;
 
         //Application._topLevels = new List<Toplevel> ();
-        Application._mouseEnteredView = new View ();
+        Application._mouseEnteredView = new ();
 
         //Application.SupportedCultures = new List<CultureInfo> ();
         Application.Force16Colors = true;
@@ -225,7 +225,7 @@ public class ApplicationTests
 
         //Application.OverlappedChildren = new List<View> ();
         //Application.OverlappedTop = 
-        Application._mouseEnteredView = new View ();
+        Application._mouseEnteredView = new ();
 
         //Application.WantContinuousButtonPressedView = new View ();
 
@@ -464,6 +464,7 @@ public class ApplicationTests
         Application.Run (t1);
 
         Assert.Equal (t1, Application.Top);
+
         // top wasn't run and so never was added to toplevel's stack
         Assert.NotEqual (top, Application.Top);
 #if DEBUG_IDISPOSABLE
@@ -511,7 +512,6 @@ public class ApplicationTests
     #region RunTests
 
     [Fact]
-
     public void Run_T_After_InitWithDriver_with_TopLevel_Does_Not_Throws ()
     {
         // Setup Mock driver
@@ -533,7 +533,6 @@ public class ApplicationTests
     }
 
     [Fact]
-
     public void Run_T_After_InitWithDriver_with_TopLevel_and_Driver_Does_Not_Throws ()
     {
         // Setup Mock driver
@@ -547,6 +546,7 @@ public class ApplicationTests
         Assert.True (Application.Top is Window);
 
         Application.Top.Dispose ();
+
         // Run<Toplevel> when already initialized or not with a Driver will not throw (because Dialog is derived from Toplevel)
         Application.Run<Dialog> (null, new FakeDriver ());
         Assert.True (Application.Top is Dialog);
@@ -561,7 +561,6 @@ public class ApplicationTests
 
     [Fact]
     [TestRespondersDisposed]
-
     public void Run_T_After_Init_Does_Not_Disposes_Application_Top ()
     {
         Init ();
@@ -572,7 +571,7 @@ public class ApplicationTests
 
         Application.Iteration += (s, a) =>
                                  {
-                                     Assert.NotEqual(initTop, Application.Top);
+                                     Assert.NotEqual (initTop, Application.Top);
 #if DEBUG_IDISPOSABLE
                                      Assert.False (initTop.WasDisposed);
 #endif
@@ -596,7 +595,6 @@ public class ApplicationTests
 
     [Fact]
     [TestRespondersDisposed]
-
     public void Run_T_After_InitWithDriver_with_TestTopLevel_DoesNotThrow ()
     {
         // Setup Mock driver
@@ -617,7 +615,6 @@ public class ApplicationTests
 
     [Fact]
     [TestRespondersDisposed]
-
     public void Run_T_After_InitNullDriver_with_TestTopLevel_DoesNotThrow ()
     {
         Application.ForceDriver = "FakeDriver";
@@ -640,7 +637,6 @@ public class ApplicationTests
 
     [Fact]
     [TestRespondersDisposed]
-
     public void Run_T_Init_Driver_Cleared_with_TestTopLevel_Throws ()
     {
         Init ();
@@ -678,7 +674,6 @@ public class ApplicationTests
 
     [Fact]
     [TestRespondersDisposed]
-
     public void Run_T_NoInit_WithDriver_DoesNotThrow ()
     {
         Application.Iteration += (s, a) => { Application.RequestStop (); };
@@ -696,7 +691,6 @@ public class ApplicationTests
 
     [Fact]
     [TestRespondersDisposed]
-
     public void Run_RequestStop_Stops ()
     {
         // Setup Mock driver
@@ -721,7 +715,6 @@ public class ApplicationTests
 
     [Fact]
     [TestRespondersDisposed]
-
     public void Run_RunningFalse_Stops ()
     {
         // Setup Mock driver
@@ -746,7 +739,6 @@ public class ApplicationTests
 
     [Fact]
     [TestRespondersDisposed]
-
     public void Run_Loaded_Ready_Unlodaded_Events ()
     {
         Init ();
@@ -782,18 +774,13 @@ public class ApplicationTests
                                      if (iteration == 0)
                                      {
                                          // TODO: Don't use Dialog here as it has more layout logic. Use Window instead.
-                                         d = new Dialog ();
+                                         d = new ();
                                          d.DrawContent += (s, a) => count++;
                                          Application.Run (d);
                                      }
                                      else if (iteration < 3)
                                      {
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent
-                                                                                            { X = 0, Y = 0, Flags = MouseFlags.ReportMousePosition }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.ReportMousePosition });
                                          Assert.False (top.NeedsDisplay);
                                          Assert.False (top.SubViewNeedsDisplay);
                                          Assert.False (top.LayoutNeeded);
@@ -858,25 +845,11 @@ public class ApplicationTests
 
         // TODO: In PR #2920 this breaks because the mouse is not grabbed anymore.
         // TODO: Move the mouse grap/drag mode from Toplevel to Border.
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed });
         Assert.Equal (w.Border, Application.MouseGrabView);
 
         // Move down and to the right.
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = 1,
-                                                               Y = 1,
-                                                               Flags = MouseFlags.Button1Pressed
-                                                                       | MouseFlags.ReportMousePosition
-                                                           }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new () { X = 1, Y = 1, Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
         Application.Refresh ();
 
         TestHelpers.AssertDriverContentsWithFrameAre (
@@ -925,7 +898,7 @@ public class ApplicationTests
 
         Window w = new ();
         w.Ready += (s, e) => Application.RequestStop (); // Causes `End` to be called
-        Application.Run(w);
+        Application.Run (w);
 
 #if DEBUG_IDISPOSABLE
         Assert.False (w.WasDisposed);
@@ -934,20 +907,23 @@ public class ApplicationTests
         Assert.NotNull (w);
         Assert.Equal (string.Empty, w.Title); // Valid - w has not been disposed. The user may want to run it again
         Assert.NotNull (Application.Top);
-        Assert.Equal(w, Application.Top);
-        Assert.NotEqual(top, Application.Top);
+        Assert.Equal (w, Application.Top);
+        Assert.NotEqual (top, Application.Top);
         Assert.Null (Application.Current);
 
-        Application.Run(w); // Valid - w has not been disposed.
+        Application.Run (w); // Valid - w has not been disposed.
 
 #if DEBUG_IDISPOSABLE
         Assert.False (w.WasDisposed);
-        var exception = Record.Exception (() => Application.Shutdown()); // Invalid - w has not been disposed.
+        Exception exception = Record.Exception (() => Application.Shutdown ()); // Invalid - w has not been disposed.
         Assert.NotNull (exception);
 
         w.Dispose ();
         Assert.True (w.WasDisposed);
-        exception = Record.Exception (() => Application.Run (w)); // Invalid - w has been disposed. Run it in debug mode will throw, otherwise the user may want to run it again
+
+        exception = Record.Exception (
+                                      () => Application.Run (
+                                                             w)); // Invalid - w has been disposed. Run it in debug mode will throw, otherwise the user may want to run it again
         Assert.NotNull (exception);
 
         exception = Record.Exception (() => Assert.Equal (string.Empty, w.Title)); // Invalid - w has been disposed and cannot be accessed
@@ -974,11 +950,11 @@ public class ApplicationTests
                                      Assert.NotNull (Application.Top);
                                      Application.RequestStop ();
                                  };
-        var top = Application.Run (null, driver);
+        Toplevel top = Application.Run (null, driver);
 #if DEBUG_IDISPOSABLE
-        Assert.Equal(top, Application.Top);
+        Assert.Equal (top, Application.Top);
         Assert.False (top.WasDisposed);
-        var exception = Record.Exception (() => Application.Shutdown ());
+        Exception exception = Record.Exception (() => Application.Shutdown ());
         Assert.NotNull (exception);
         Assert.False (top.WasDisposed);
 #endif
@@ -1010,9 +986,10 @@ public class ApplicationTests
         Application.Run<Toplevel> (null, driver);
 #if DEBUG_IDISPOSABLE
         Assert.False (Application.Top.WasDisposed);
-        var exception = Record.Exception (() => Application.Shutdown ());
+        Exception exception = Record.Exception (() => Application.Shutdown ());
         Assert.NotNull (exception);
         Assert.False (Application.Top.WasDisposed);
+
         // It's up to caller to dispose it
         Application.Top.Dispose ();
         Assert.True (Application.Top.WasDisposed);
@@ -1038,9 +1015,10 @@ public class ApplicationTests
         Application.Run (new (), null, driver);
 #if DEBUG_IDISPOSABLE
         Assert.False (Application.Top.WasDisposed);
-        var exception = Record.Exception (() => Application.Shutdown ());
+        Exception exception = Record.Exception (() => Application.Shutdown ());
         Assert.NotNull (exception);
         Assert.False (Application.Top.WasDisposed);
+
         // It's up to caller to dispose it
         Application.Top.Dispose ();
         Assert.True (Application.Top.WasDisposed);

+ 17 - 38
UnitTests/Application/MouseTests.cs

@@ -42,19 +42,18 @@ public class MouseTests
     )
     {
         var mouseEvent = new MouseEvent { X = clickX, Y = clickY, Flags = MouseFlags.Button1Pressed };
-        var mouseEventArgs = new MouseEventEventArgs (mouseEvent);
         var clicked = false;
 
-        void OnApplicationOnMouseEvent (object s, MouseEventEventArgs e)
+        void OnApplicationOnMouseEvent (object s, MouseEvent e)
         {
-            Assert.Equal (expectedX, e.MouseEvent.X);
-            Assert.Equal (expectedY, e.MouseEvent.Y);
+            Assert.Equal (expectedX, e.X);
+            Assert.Equal (expectedY, e.Y);
             clicked = true;
         }
 
         Application.MouseEvent += OnApplicationOnMouseEvent;
 
-        Application.OnMouseEvent (mouseEventArgs);
+        Application.OnMouseEvent (mouseEvent);
         Assert.Equal (expectedClicked, clicked);
         Application.MouseEvent -= OnApplicationOnMouseEvent;
     }
@@ -107,7 +106,8 @@ public class MouseTests
         Point pos = new (offset, offset);
 
         var clicked = false;
-        var view = new View ()
+
+        var view = new View
         {
             X = pos.X,
             Y = pos.Y,
@@ -116,20 +116,19 @@ public class MouseTests
         };
 
         var mouseEvent = new MouseEvent { X = clickX, Y = clickY, Flags = MouseFlags.Button1Clicked };
-        var mouseEventArgs = new MouseEventEventArgs (mouseEvent);
 
         view.MouseClick += (s, e) =>
-                                      {
-                                          Assert.Equal (expectedX, e.MouseEvent.X);
-                                          Assert.Equal (expectedY, e.MouseEvent.Y);
-                                          clicked = true;
-                                      };
+                           {
+                               Assert.Equal (expectedX, e.MouseEvent.X);
+                               Assert.Equal (expectedY, e.MouseEvent.Y);
+                               clicked = true;
+                           };
 
         var top = new Toplevel ();
         top.Add (view);
         Application.Begin (top);
 
-        Application.OnMouseEvent (mouseEventArgs);
+        Application.OnMouseEvent (mouseEvent);
         Assert.Equal (expectedClicked, clicked);
     }
 
@@ -215,7 +214,6 @@ public class MouseTests
         top.Add (view);
         Application.Begin (top);
         var mouseEvent = new MouseEvent { X = clickX, Y = clickY, Flags = MouseFlags.Button1Clicked };
-        var mouseEventArgs = new MouseEventEventArgs (mouseEvent);
 
         view.MouseClick += (s, e) =>
                            {
@@ -224,7 +222,7 @@ public class MouseTests
                                clicked = true;
                            };
 
-        Application.OnMouseEvent (mouseEventArgs);
+        Application.OnMouseEvent (mouseEvent);
         Assert.Equal (expectedClicked, clicked);
     }
 
@@ -254,12 +252,7 @@ public class MouseTests
                                          Assert.True (tf.HasFocus);
                                          Assert.Null (Application.MouseGrabView);
 
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent
-                                                                                                { X = 5, Y = 5, Flags = MouseFlags.ReportMousePosition }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new() { X = 5, Y = 5, Flags = MouseFlags.ReportMousePosition });
 
                                          Assert.Equal (sv, Application.MouseGrabView);
 
@@ -273,29 +266,15 @@ public class MouseTests
                                          // another toplevel (Dialog) was opened
                                          Assert.Null (Application.MouseGrabView);
 
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent
-                                                                                                { X = 5, Y = 5, Flags = MouseFlags.ReportMousePosition }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new() { X = 5, Y = 5, Flags = MouseFlags.ReportMousePosition });
 
                                          Assert.Null (Application.MouseGrabView);
 
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent
-                                                                                                { X = 40, Y = 12, Flags = MouseFlags.ReportMousePosition }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new() { X = 40, Y = 12, Flags = MouseFlags.ReportMousePosition });
 
                                          Assert.Null (Application.MouseGrabView);
 
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new() { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed });
 
                                          Assert.Null (Application.MouseGrabView);
 

+ 2 - 10
UnitTests/Input/EscSeqUtilsTests.cs

@@ -699,11 +699,7 @@ public class EscSeqUtilsTests
         top.Add (view);
         Application.Begin (top);
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 0, Y = 0, Flags = 0 }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = 0 });
 
         ClearAll ();
 
@@ -760,11 +756,7 @@ public class EscSeqUtilsTests
                                          // set Application.WantContinuousButtonPressedView to null
                                          view.WantContinuousButtonPressed = false;
 
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent { X = 0, Y = 0, Flags = 0 }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = 0 });
 
                                          Application.RequestStop ();
                                      }

+ 1 - 1
UnitTests/Input/ResponderTests.cs

@@ -234,7 +234,7 @@ public class ResponderTests
         //Assert.False (r.OnKeyDown (new KeyEventArgs () { Key = Key.Unknown }));
         Assert.False (r.OnKeyDown (new Key { KeyCode = KeyCode.Null }));
         Assert.False (r.OnKeyUp (new Key { KeyCode = KeyCode.Null }));
-        Assert.False (r.OnMouseEvent (new MouseEvent { Flags = MouseFlags.AllEvents }));
+        Assert.False (r.NewMouseEvent (new MouseEvent { Flags = MouseFlags.AllEvents }));
         Assert.False (r.OnMouseEnter (new MouseEvent { Flags = MouseFlags.AllEvents }));
         Assert.False (r.OnMouseLeave (new MouseEvent { Flags = MouseFlags.AllEvents }));
 

+ 181 - 46
UnitTests/View/MouseTests.cs

@@ -27,7 +27,7 @@ public class MouseTests (ITestOutputHelper output)
             testView.SetFocus ();
         }
 
-        testView.OnMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked });
+        testView.NewMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked });
         Assert.True (superView.HasFocus);
         Assert.Equal (expectedHasFocus, testView.HasFocus);
     }
@@ -73,9 +73,9 @@ public class MouseTests (ITestOutputHelper output)
         Application.Begin (top);
 
         Assert.Equal (new Point (4, 4), testView.Frame.Location);
-        Application.OnMouseEvent (new (new () { X = xy, Y = xy, Flags = MouseFlags.Button1Pressed }));
+        Application.OnMouseEvent (new () { X = xy, Y = xy, Flags = MouseFlags.Button1Pressed });
 
-        Application.OnMouseEvent (new (new () { X = xy + 1, Y = xy + 1, Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition }));
+        Application.OnMouseEvent (new () { X = xy + 1, Y = xy + 1, Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
 
         Assert.Equal (expectedMoved, new Point (5, 5) == testView.Frame.Location);
     }
@@ -89,7 +89,7 @@ public class MouseTests (ITestOutputHelper output)
         var view = new View ();
         view.MouseEvent += (s, e) => mouseFlagsFromEvent = e.MouseEvent.Flags;
 
-        view.OnMouseEvent (new MouseEvent () { Flags = mouseFlags });
+        view.NewMouseEvent (new MouseEvent () { Flags = mouseFlags });
         Assert.Equal (mouseFlagsFromEvent, expectedMouseFlagsFromEvent);
     }
 
@@ -280,9 +280,32 @@ public class MouseTests (ITestOutputHelper output)
         Application.Shutdown ();
     }
 
+    [Fact]
+    public void NewMouseEvent_Invokes_MouseEvent_Properly ()
+    {
+        View view = new ()
+        {
+            Width = 1,
+            Height = 1,
+        };
+        bool mouseEventInvoked = false;
+        view.MouseEvent += (s, e) =>
+                           {
+                               mouseEventInvoked = true;
+                               e.Handled = true;
+                           };
+
+        MouseEvent me = new ();
+        view.NewMouseEvent (me);
+        Assert.True (mouseEventInvoked);
+        Assert.True (me.Handled);
+
+        view.Dispose ();
+    }
+
     [Theory]
     [MemberData (nameof (AllViews))]
-    public void AllViews_OnMouseEvent_Enabled_False_Does_Not_Set_Handled (View view, string viewName)
+    public void AllViews_NewMouseEvent_Enabled_False_Does_Not_Set_Handled (View view, string viewName)
     {
         if (view == null)
         {
@@ -292,14 +315,14 @@ public class MouseTests (ITestOutputHelper output)
 
         view.Enabled = false;
         var me = new MouseEvent ();
-        view.OnMouseEvent (me);
+        view.NewMouseEvent (me);
         Assert.False (me.Handled);
         view.Dispose ();
     }
 
     [Theory]
     [MemberData (nameof (AllViews))]
-    public void AllViews_OnMouseClick_Enabled_False_Does_Not_Set_Handled (View view, string viewName)
+    public void AllViews_NewMouseEvent_Clicked_Enabled_False_Does_Not_Set_Handled (View view, string viewName)
     {
         if (view == null)
         {
@@ -312,7 +335,7 @@ public class MouseTests (ITestOutputHelper output)
         {
             Flags = MouseFlags.Button1Clicked
         };
-        view.OnMouseEvent (me);
+        view.NewMouseEvent (me);
         Assert.False (me.Handled);
         view.Dispose ();
     }
@@ -322,15 +345,14 @@ public class MouseTests (ITestOutputHelper output)
     [InlineData (MouseFlags.Button2Pressed, MouseFlags.Button2Released, MouseFlags.Button2Clicked)]
     [InlineData (MouseFlags.Button3Pressed, MouseFlags.Button3Released, MouseFlags.Button3Clicked)]
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
-    public void WantContinuousButtonPressed_False_Button1Press_Release_DoesNotClick (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
+    public void WantContinuousButtonPressed_False_Button_Press_Release_DoesNotClick (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
     {
-        var me = new MouseEvent ()
-        {
-            Flags = pressed
-        };
+        var me = new MouseEvent ();
 
         var view = new View ()
         {
+            Width = 1,
+            Height = 1,
             WantContinuousButtonPressed = false
         };
 
@@ -338,22 +360,23 @@ public class MouseTests (ITestOutputHelper output)
 
         view.MouseClick += (s, e) => clickedCount++;
 
-
-        view.OnMouseEvent (me);
+        me.Flags = pressed;
+        view.NewMouseEvent (me);
         Assert.Equal (0, clickedCount);
         me.Handled = false;
 
-        view.OnMouseEvent (me);
+        me.Flags = pressed;
+        view.NewMouseEvent (me);
         Assert.Equal (0, clickedCount);
         me.Handled = false;
 
         me.Flags = released;
-        view.OnMouseEvent (me);
+        view.NewMouseEvent (me);
         Assert.Equal (0, clickedCount);
         me.Handled = false;
 
         me.Flags =clicked;
-        view.OnMouseEvent (me);
+        view.NewMouseEvent (me);
         Assert.Equal (1, clickedCount);
 
         view.Dispose ();
@@ -364,15 +387,14 @@ public class MouseTests (ITestOutputHelper output)
     [InlineData (MouseFlags.Button2Pressed, MouseFlags.Button2Released, MouseFlags.Button2Clicked)]
     [InlineData (MouseFlags.Button3Pressed, MouseFlags.Button3Released, MouseFlags.Button3Clicked)]
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
-    public void WantContinuousButtonPressed_True_Button1Press_Release_Clicks_Repeatedly (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
+    public void WantContinuousButtonPressed_True_Button_Press_Release_Clicks_Repeatedly (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
     {
-        var me = new MouseEvent ()
-        {
-            Flags = pressed
-        };
+        var me = new MouseEvent ();
 
         var view = new View ()
         {
+            Width = 1,
+            Height = 1,
             WantContinuousButtonPressed = true
         };
 
@@ -380,66 +402,179 @@ public class MouseTests (ITestOutputHelper output)
 
         view.MouseClick += (s, e) => clickedCount++;
 
-        view.OnMouseEvent (me);
-        Assert.Equal (0, clickedCount);
+        me.Flags = pressed;
+        view.NewMouseEvent (me);
+        Assert.Equal (1, clickedCount);
         me.Handled = false;
 
-        view.OnMouseEvent (me);
-        Assert.Equal (1, clickedCount);
+        me.Flags = pressed;
+        view.NewMouseEvent (me);
+        Assert.Equal (2, clickedCount);
         me.Handled = false;
 
         me.Flags = released;
-        view.OnMouseEvent (me);
+        view.NewMouseEvent (me);
         Assert.Equal (2, clickedCount);
         me.Handled = false;
 
         me.Flags = clicked;
-        view.OnMouseEvent (me);
+        view.NewMouseEvent (me);
         Assert.Equal (2, clickedCount);
 
         view.Dispose ();
     }
 
     [Fact]
-    public void HighlightOnPress_False_No_Highlights ()
+    public void WantContinuousButtonPressed_True_Move_InViewport_OutOfViewport_Keeps_Counting ()
+    {
+        var me = new MouseEvent ();
+
+        var view = new View ()
+        {
+            Width = 1,
+            Height = 1,
+            WantContinuousButtonPressed = true
+        };
+
+        var clickedCount = 0;
+
+        view.MouseClick += (s, e) => clickedCount++;
+
+        // Start in Viewport
+        me.Flags = MouseFlags.Button1Pressed;
+        me.X = 0;
+        view.NewMouseEvent (me);
+        Assert.Equal (1, clickedCount);
+        me.Handled = false;
+
+        // Move out of Viewport
+        me.Flags = MouseFlags.Button1Pressed;
+        me.X = 1;
+        view.NewMouseEvent (me);
+        Assert.Equal (2, clickedCount);
+        me.Handled = false;
+
+        // Move into Viewport
+        me.Flags = MouseFlags.Button1Pressed;
+        me.X = 0;
+        view.NewMouseEvent (me);
+        Assert.Equal (3, clickedCount);
+        me.Handled = false;
+
+        view.Dispose ();
+    }
+
+    [Theory]
+    [InlineData(false, 0, 0)]
+    [InlineData (true, 1, 1)]
+    public void HighlightOnPress_Fires_Events_And_Highlights (bool highlightOnPress, int expectedEnabling, int expectedDisabling)
     {
         var view = new View ()
         {
-            HighlightOnPress = false
+            HighlightOnPress = highlightOnPress,
+            Height = 1,
+            Width = 1
         };
+
+        int enablingHighlight = 0;
+        int disablingHighlight = 0;
+        view.EnablingHighlight += View_EnablingHighlight;
+        view.DisablingHighlight += View_DisablingHighlight;
         view.ColorScheme = new ColorScheme (new Attribute (ColorName.Red, ColorName.Blue));
         ColorScheme originalColorScheme = view.ColorScheme;
 
-        var me = new MouseEvent ()
+        view.NewMouseEvent (new () { Flags = MouseFlags.Button1Pressed, });
+
+        if (highlightOnPress)
         {
-            Flags = MouseFlags.Button1Pressed
-        };
+            Assert.NotEqual (originalColorScheme, view.ColorScheme);
+        }
+        else
+        {
+            Assert.Equal (originalColorScheme, view.ColorScheme);
+        }
 
-        view.OnMouseEvent (me);
+        view.NewMouseEvent (new () { Flags = MouseFlags.Button1Released, });
         Assert.Equal (originalColorScheme, view.ColorScheme);
+        Assert.Equal (expectedEnabling, enablingHighlight);
+        Assert.Equal (expectedDisabling, disablingHighlight);
 
         view.Dispose ();
-    }
 
+        return;
 
-    [Fact]
-    public void HighlightOnPress_False_Highlights ()
+        void View_DisablingHighlight (object sender, System.ComponentModel.CancelEventArgs e)
+        {
+           disablingHighlight++;
+        }
+        void View_EnablingHighlight (object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            enablingHighlight++;
+        }
+    }
+
+    [Theory]
+    [InlineData (0)]
+    [InlineData (1)]
+    [InlineData (10)]
+    public void HighlightOnPress_Move_Keeps_Highlight (int x)
     {
         var view = new View ()
         {
-            HighlightOnPress = true
+            HighlightOnPress = true,
+            Height = 1,
+            Width = 1
         };
-        view.ColorScheme = new ColorScheme (new Attribute (ColorName.Red, ColorName.Blue));
-        ColorScheme originalColorScheme = view.ColorScheme;
+        int enablingHighlight = 0;
+        int disablingHighlight = 0;
+        view.EnablingHighlight += View_EnablingHighlight;
+        view.DisablingHighlight += View_DisablingHighlight;
+        bool inViewport = view.Bounds.Contains (x, 0);
 
-        var me = new MouseEvent ()
+        // Start at 0,0 ; in viewport
+        view.NewMouseEvent (new () { X = 0, Flags = MouseFlags.Button1Pressed });
+        Assert.Equal (1, enablingHighlight);
+        Assert.Equal (0, disablingHighlight);
+
+        // Move to x,0 
+        view.NewMouseEvent (new () { X = x, Flags = MouseFlags.Button1Pressed });
+
+        if (inViewport)
         {
-            Flags = MouseFlags.Button1Pressed
-        };
+            Assert.Equal (2, enablingHighlight);
+            Assert.Equal (0, disablingHighlight);
+        }
+        else
+        {
+            Assert.Equal (1, enablingHighlight);
+            Assert.Equal (1, disablingHighlight);
+        }
 
-        view.OnMouseEvent (me);
-        Assert.NotEqual (originalColorScheme, view.ColorScheme);
+        // Move backto 0,0 ; in viewport
+        view.NewMouseEvent (new () { X = 0, Flags = MouseFlags.Button1Pressed });
+        if (inViewport)
+        {
+            Assert.Equal (3, enablingHighlight);
+            Assert.Equal (0, disablingHighlight);
+        }
+        else
+        {
+            Assert.Equal (2, enablingHighlight);
+            Assert.Equal (1, disablingHighlight);
+        }
 
         view.Dispose ();
+
+        return;
+
+        void View_DisablingHighlight (object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            disablingHighlight++;
+        }
+        void View_EnablingHighlight (object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            enablingHighlight++;
+        }
     }
+
 }

+ 4 - 4
UnitTests/View/NavigationTests.cs

@@ -452,7 +452,7 @@ public class NavigationTests
 
         view.NewKeyDownEvent (Key.Space);
         Assert.True (wasClicked);
-        view.OnMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
+        view.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
         Assert.False (wasClicked);
         Assert.True (view.Enabled);
         Assert.True (view.CanFocus);
@@ -461,7 +461,7 @@ public class NavigationTests
         view.Enabled = false;
         view.NewKeyDownEvent (Key.Space);
         Assert.False (wasClicked);
-        view.OnMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
+        view.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
         Assert.False (wasClicked);
         Assert.False (view.Enabled);
         Assert.True (view.CanFocus);
@@ -491,7 +491,7 @@ public class NavigationTests
 
                                      win.NewKeyDownEvent (Key.Enter);
                                      Assert.True (wasClicked);
-                                     button.OnMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
+                                     button.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
                                      Assert.False (wasClicked);
                                      Assert.True (button.Enabled);
                                      Assert.True (button.CanFocus);
@@ -503,7 +503,7 @@ public class NavigationTests
                                      win.Enabled = false;
                                      button.NewKeyDownEvent (Key.Enter);
                                      Assert.False (wasClicked);
-                                     button.OnMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
+                                     button.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked });
                                      Assert.False (wasClicked);
                                      Assert.False (button.Enabled);
                                      Assert.True (button.CanFocus);

+ 1 - 1
UnitTests/View/ViewTests.cs

@@ -865,7 +865,7 @@ At 0,0
 
         //Assert.False (r.OnKeyDown (new KeyEventArgs () { Key = Key.Unknown }));
         Assert.False (r.OnKeyUp (new Key { KeyCode = KeyCode.Null }));
-        Assert.False (r.OnMouseEvent (new MouseEvent { Flags = MouseFlags.AllEvents }));
+        Assert.False (r.NewMouseEvent (new MouseEvent { Flags = MouseFlags.AllEvents }));
         Assert.False (r.OnMouseEnter (new MouseEvent { Flags = MouseFlags.AllEvents }));
         Assert.False (r.OnMouseLeave (new MouseEvent { Flags = MouseFlags.AllEvents }));
 

+ 3 - 3
UnitTests/Views/CheckBoxTests.cs

@@ -47,7 +47,7 @@ public class CheckBoxTests
         Assert.False (checkBox.Checked);
         Assert.True (checkBox.NewKeyDownEvent (Key.Space));
         Assert.True (checkBox.Checked);
-        Assert.True (checkBox.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (checkBox.NewMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }));
         Assert.False (checkBox.Checked);
 
         checkBox.AllowNullChecked = true;
@@ -60,11 +60,11 @@ public class CheckBoxTests
 {CM.Glyphs.NullChecked} Check this out 你",
                                                       _output
                                                      );
-        Assert.True (checkBox.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (checkBox.NewMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }));
         Assert.True (checkBox.Checked);
         Assert.True (checkBox.NewKeyDownEvent (Key.Space));
         Assert.False (checkBox.Checked);
-        Assert.True (checkBox.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (checkBox.NewMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }));
         Assert.Null (checkBox.Checked);
 
         checkBox.AllowNullChecked = false;

+ 2 - 2
UnitTests/Views/ColorPickerTests.cs

@@ -52,9 +52,9 @@ public class ColorPickerTests
         top.Add (colorPicker);
         Application.Begin (top);
 
-        Assert.False (colorPicker.OnMouseEvent (new MouseEvent ()));
+        Assert.False (colorPicker.NewMouseEvent (new MouseEvent ()));
 
-        Assert.True (colorPicker.OnMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked, X = 4, Y = 1 }));
+        Assert.True (colorPicker.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1Clicked, X = 4, Y = 1 }));
         Assert.Equal (ColorName.Blue, colorPicker.SelectedColor);
     }
 

+ 27 - 27
UnitTests/Views/ComboBoxTests.cs

@@ -146,7 +146,7 @@ public class ComboBoxTests
         Assert.Equal ("", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -203,7 +203,7 @@ public class ComboBoxTests
         Assert.Equal ("", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -240,7 +240,7 @@ public class ComboBoxTests
         Assert.Equal ("", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -297,7 +297,7 @@ public class ComboBoxTests
         Assert.Equal ("", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -308,7 +308,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = 0, Y = 1, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -319,7 +319,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = 0, Y = 1, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -332,7 +332,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -342,14 +342,14 @@ public class ComboBoxTests
         Assert.Equal ("Three", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -359,7 +359,7 @@ public class ComboBoxTests
         Assert.Equal ("Three", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -370,7 +370,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -398,14 +398,14 @@ public class ComboBoxTests
         Assert.Equal ("", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -416,7 +416,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = -1, Y = 0, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -429,7 +429,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -440,7 +440,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = 0, Y = -1, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -453,7 +453,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -464,7 +464,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = cb.Frame.Width, Y = 0, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -477,7 +477,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -488,7 +488,7 @@ public class ComboBoxTests
 
         Assert.True (
                      cb.Subviews [1]
-                       .OnMouseEvent (
+                       .NewMouseEvent (
                                     new MouseEvent { X = 0, Y = cb.Frame.Height, Flags = MouseFlags.Button1Clicked }
                                    )
                     );
@@ -516,7 +516,7 @@ public class ComboBoxTests
         Assert.Equal ("", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -673,7 +673,7 @@ Three ",
         Assert.Equal ("", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -685,7 +685,7 @@ Three ",
         Assert.True (cb.Subviews [1].NewKeyDownEvent (Key.CursorDown));
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -695,7 +695,7 @@ Three ",
         Assert.Equal ("", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -707,7 +707,7 @@ Three ",
         Assert.True (cb.Subviews [1].NewKeyDownEvent (Key.CursorUp));
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -735,7 +735,7 @@ Three ",
         Assert.Equal ("", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );
@@ -792,7 +792,7 @@ Three ",
         Assert.Equal ("", cb.Text);
 
         Assert.True (
-                     cb.OnMouseEvent (
+                     cb.NewMouseEvent (
                                     new MouseEvent { X = cb.Bounds.Right - 1, Y = 0, Flags = MouseFlags.Button1Pressed }
                                    )
                     );

+ 19 - 51
UnitTests/Views/ContextMenuTests.cs

@@ -107,11 +107,11 @@ public class ContextMenuTests
         Assert.True (ContextMenu.IsShow);
         Assert.Equal (cm.MenuBar, Application.MouseGrabView);
         Assert.False (menu.IsMenuOpen);
-        Assert.False (menu.OnMouseEvent (new MouseEvent { X = 1, Flags = MouseFlags.ReportMousePosition, View = menu }));
+        Assert.False (menu.NewMouseEvent(new MouseEvent { X = 1, Flags = MouseFlags.ReportMousePosition, View = menu }));
         Assert.True (ContextMenu.IsShow);
         Assert.Equal (cm.MenuBar, Application.MouseGrabView);
         Assert.False (menu.IsMenuOpen);
-        Assert.True (menu.OnMouseEvent (new MouseEvent { X = 1, Flags = MouseFlags.Button1Clicked, View = menu }));
+        Assert.True (menu.NewMouseEvent(new MouseEvent { X = 1, Flags = MouseFlags.Button1Clicked, View = menu }));
         Assert.False (ContextMenu.IsShow);
         Assert.Equal (menu, Application.MouseGrabView);
         Assert.True (menu.IsMenuOpen);
@@ -269,11 +269,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 8, Y = 2, Flags = MouseFlags.Button3Clicked }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 8, Y = 2, Flags = MouseFlags.Button3Clicked });
 
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -355,11 +351,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 9, Y = 3, Flags = MouseFlags.Button3Clicked }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 9, Y = 3, Flags = MouseFlags.Button3Clicked });
 
         var firstIteration = false;
         Application.RunIteration (ref rsDialog, ref firstIteration);
@@ -414,11 +406,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 9, Y = 3, Flags = MouseFlags.Button3Clicked }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 9, Y = 3, Flags = MouseFlags.Button3Clicked });
 
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -517,7 +505,7 @@ public class ContextMenuTests
         top.RequestStop ();
         Assert.False (ContextMenu.IsShow);
     }
-    
+
     [Fact]
     [AutoInitShutdown]
     public void Key_Open_And_Close_The_ContextMenu ()
@@ -653,7 +641,7 @@ public class ContextMenuTests
 
         Assert.True (
                      top.Subviews [0]
-                        .OnMouseEvent (
+                        .NewMouseEvent (
                                      new MouseEvent { X = 0, Y = 3, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                     )
                     );
@@ -701,7 +689,7 @@ public class ContextMenuTests
 
         Assert.True (
                      top.Subviews [0]
-                        .OnMouseEvent (
+                        .NewMouseEvent (
                                      new MouseEvent { X = 30, Y = 3, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                     )
                     );
@@ -748,7 +736,7 @@ public class ContextMenuTests
 
         Assert.True (
                      top.Subviews [0]
-                        .OnMouseEvent (
+                        .NewMouseEvent (
                                      new MouseEvent { X = 30, Y = 3, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                     )
                     );
@@ -792,7 +780,7 @@ public class ContextMenuTests
 
         Assert.True (
                      top.Subviews [0]
-                        .OnMouseEvent (
+                        .NewMouseEvent (
                                      new MouseEvent { X = 30, Y = 3, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                     )
                     );
@@ -836,7 +824,7 @@ public class ContextMenuTests
 
         Assert.True (
                      top.Subviews [0]
-                        .OnMouseEvent (
+                        .NewMouseEvent (
                                      new MouseEvent { X = 30, Y = 3, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                     )
                     );
@@ -879,12 +867,12 @@ public class ContextMenuTests
         top.Add (lbl);
         Application.Begin (top);
 
-        Assert.True (lbl.OnMouseEvent (new MouseEvent { Flags = cm.MouseFlags }));
+        Assert.True (lbl.NewMouseEvent (new MouseEvent { Flags = cm.MouseFlags }));
         Assert.Equal ("Replaced", lbl.Text);
 
         lbl.Text = "Original";
         cm.MouseFlags = MouseFlags.Button2Clicked;
-        Assert.True (lbl.OnMouseEvent (new MouseEvent { Flags = cm.MouseFlags }));
+        Assert.True (lbl.NewMouseEvent (new MouseEvent { Flags = cm.MouseFlags }));
         Assert.Equal ("Replaced", lbl.Text);
     }
 
@@ -1326,11 +1314,7 @@ public class ContextMenuTests
                                                      );
 
         // X=5 is the border and so need to use at least one more
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 6, Y = 13, Flags = MouseFlags.Button1Clicked }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 13, Flags = MouseFlags.Button1Clicked });
 
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1348,11 +1332,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 6, Y = 12, Flags = MouseFlags.Button1Clicked }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 12, Flags = MouseFlags.Button1Clicked });
 
         firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1371,7 +1351,7 @@ public class ContextMenuTests
         Application.End (rs);
     }
 
-        [Fact]
+    [Fact]
     [AutoInitShutdown]
     public void UseSubMenusSingleFrame_False_By_Mouse ()
     {
@@ -1423,11 +1403,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 6, Y = 13, Flags = MouseFlags.ReportMousePosition }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 13, Flags = MouseFlags.ReportMousePosition });
 
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1444,11 +1420,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 6, Y = 14, Flags = MouseFlags.ReportMousePosition }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 14, Flags = MouseFlags.ReportMousePosition });
 
         firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1466,11 +1438,7 @@ public class ContextMenuTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 6, Y = 13, Flags = MouseFlags.ReportMousePosition }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 13, Flags = MouseFlags.ReportMousePosition });
 
         firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);

+ 1 - 1
UnitTests/Views/LabelTests.cs

@@ -67,7 +67,7 @@ public class LabelTests
         Assert.False (label.HasFocus);
         Assert.False (nextSubview.HasFocus);
 
-        label.OnMouseEvent (new MouseEvent () { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked });
+        label.NewMouseEvent (new MouseEvent () { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked });
         Assert.False (label.HasFocus);
         Assert.True (nextSubview.HasFocus);
     }

+ 10 - 15
UnitTests/Views/ListViewTests.cs

@@ -425,7 +425,7 @@ Item 6",
     public void Accept_Command_Accepts_and_Opens_Selected_Item ()
     {
         List<string> source = ["One", "Two", "Three"];
-        var listView = new ListView {Source = new ListWrapper (source) };
+        var listView = new ListView { Source = new ListWrapper (source) };
         listView.SelectedItem = 0;
 
         var accepted = false;
@@ -719,48 +719,43 @@ Item 6",
 │Three│
 └─────┘", _output);
 
-        Application.OnMouseEvent (new (new ()
-        {
-            X = 0,
-            Y = 0,
-            Flags = MouseFlags.Button1Clicked
-        }));
+        Application.OnMouseEvent (new () { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked });
         Assert.Equal ("", selected);
         Assert.Equal (-1, lv.SelectedItem);
 
-        Application.OnMouseEvent (new (new ()
+        Application.OnMouseEvent (new ()
         {
             X = 1,
             Y = 1,
             Flags = MouseFlags.Button1Clicked
-        }));
+        });
         Assert.Equal ("One", selected);
         Assert.Equal (0, lv.SelectedItem);
 
-        Application.OnMouseEvent (new (new ()
+        Application.OnMouseEvent (new ()
         {
             X = 1,
             Y = 2,
             Flags = MouseFlags.Button1Clicked
-        }));
+        });
         Assert.Equal ("Two", selected);
         Assert.Equal (1, lv.SelectedItem);
 
-        Application.OnMouseEvent (new (new ()
+        Application.OnMouseEvent (new ()
         {
             X = 1,
             Y = 3,
             Flags = MouseFlags.Button1Clicked
-        }));
+        });
         Assert.Equal ("Three", selected);
         Assert.Equal (2, lv.SelectedItem);
 
-        Application.OnMouseEvent (new (new ()
+        Application.OnMouseEvent (new ()
         {
             X = 1,
             Y = 4,
             Flags = MouseFlags.Button1Clicked
-        }));
+        });
         Assert.Equal ("Three", selected);
         Assert.Equal (2, lv.SelectedItem);
     }

+ 43 - 59
UnitTests/Views/MenuBarTests.cs

@@ -37,13 +37,13 @@ public class MenuBarTests
         Assert.True (mi.Checked);
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
 
         Assert.True (
-                     menu._openMenu.OnMouseEvent (
+                     menu._openMenu.NewMouseEvent (
                                                 new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked, View = menu._openMenu }
                                                )
                     );
@@ -57,7 +57,7 @@ public class MenuBarTests
         Assert.Null (mi.Checked);
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
@@ -75,7 +75,7 @@ public class MenuBarTests
                                                      );
 
         Assert.True (
-                     menu._openMenu.OnMouseEvent (
+                     menu._openMenu.NewMouseEvent (
                                                 new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked, View = menu._openMenu }
                                                )
                     );
@@ -87,13 +87,13 @@ public class MenuBarTests
         Assert.False (mi.Checked);
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
 
         Assert.True (
-                     menu._openMenu.OnMouseEvent (
+                     menu._openMenu.NewMouseEvent (
                                                 new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Clicked, View = menu._openMenu }
                                                )
                     );
@@ -296,7 +296,7 @@ public class MenuBarTests
                                               );
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
@@ -317,7 +317,7 @@ public class MenuBarTests
 
         Assert.True (
                      top.Subviews [1]
-                        .OnMouseEvent (
+                        .NewMouseEvent (
                                      new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.Button1Clicked, View = top.Subviews [1] }
                                     )
                     );
@@ -338,7 +338,7 @@ public class MenuBarTests
 
         Assert.True (
                      top.Subviews [1]
-                        .OnMouseEvent (
+                        .NewMouseEvent (
                                      new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.ReportMousePosition, View = top.Subviews [1] }
                                     )
                     );
@@ -516,11 +516,7 @@ public class MenuBarTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 20, Y = 5, Flags = MouseFlags.Button1Clicked }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 20, Y = 5, Flags = MouseFlags.Button1Clicked });
 
         firstIteration = false;
 
@@ -553,11 +549,7 @@ public class MenuBarTests
         {
             menu.OpenMenu ();
 
-            Application.OnMouseEvent (
-                                      new MouseEventEventArgs (
-                                                               new MouseEvent { X = 20, Y = 5 + i, Flags = MouseFlags.Button1Clicked }
-                                                              )
-                                     );
+            Application.OnMouseEvent (new MouseEvent { X = 20, Y = 5 + i, Flags = MouseFlags.Button1Clicked });
 
             firstIteration = false;
             Application.RunIteration (ref rsDialog, ref firstIteration);
@@ -712,11 +704,7 @@ public class MenuBarTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 20, Y = 5, Flags = MouseFlags.Button1Clicked }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 20, Y = 5, Flags = MouseFlags.Button1Clicked });
 
         firstIteration = false;
 
@@ -738,11 +726,7 @@ public class MenuBarTests
         {
             menu.OpenMenu ();
 
-            Application.OnMouseEvent (
-                                      new MouseEventEventArgs (
-                                                               new MouseEvent { X = 20, Y = 5 + i, Flags = MouseFlags.Button1Clicked }
-                                                              )
-                                     );
+            Application.OnMouseEvent (new MouseEvent { X = 20, Y = 5 + i, Flags = MouseFlags.Button1Clicked });
 
             firstIteration = false;
             Application.RunIteration (ref rs, ref firstIteration);
@@ -1473,13 +1457,13 @@ wo
         top.Add (menu);
         Application.Begin (top);
 
-        Assert.True (menu.OnMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
+        Assert.True (menu.NewMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
         Assert.True (menu.IsMenuOpen);
         top.Draw ();
 
         TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), _output);
 
-        Assert.True (menu.OnMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
+        Assert.True (menu.NewMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
         Assert.False (menu.IsMenuOpen);
         top.Draw ();
         TestHelpers.AssertDriverContentsAre (expectedMenu.ClosedMenuText, _output);
@@ -2189,7 +2173,7 @@ wo
 
         // open the menu
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
@@ -2198,7 +2182,7 @@ wo
         Assert.Equal ("_New", miCurrent.Title);
 
         Assert.True (
-                     mCurrent.OnMouseEvent (
+                     mCurrent.NewMouseEvent (
                                           new MouseEvent { X = 1, Y = 1, Flags = MouseFlags.ReportMousePosition, View = mCurrent }
                                          )
                     );
@@ -2207,7 +2191,7 @@ wo
         Assert.Equal ("_New", miCurrent.Title);
 
         Assert.True (
-                     mCurrent.OnMouseEvent (
+                     mCurrent.NewMouseEvent (
                                           new MouseEvent { X = 1, Y = 1, Flags = MouseFlags.ReportMousePosition, View = mCurrent }
                                          )
                     );
@@ -2216,7 +2200,7 @@ wo
         Assert.Equal ("_New", miCurrent.Title);
 
         Assert.True (
-                     mCurrent.OnMouseEvent (
+                     mCurrent.NewMouseEvent (
                                           new MouseEvent { X = 1, Y = 2, Flags = MouseFlags.ReportMousePosition, View = mCurrent }
                                          )
                     );
@@ -2226,7 +2210,7 @@ wo
 
         // close the menu
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
@@ -2394,7 +2378,7 @@ Edit
 
         // Click on Edit
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 10, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
@@ -2404,7 +2388,7 @@ Edit
 
         // Click on Paste
         Assert.True (
-                     mCurrent.OnMouseEvent (
+                     mCurrent.NewMouseEvent (
                                           new MouseEvent { X = 10, Y = 2, Flags = MouseFlags.ReportMousePosition, View = mCurrent }
                                          )
                     );
@@ -2418,7 +2402,7 @@ Edit
             {
                 // Edit menu is open. Click on the menu at Y = -1, which is outside the menu.
                 Assert.False (
-                              mCurrent.OnMouseEvent (
+                              mCurrent.NewMouseEvent (
                                                      new MouseEvent { X = 10, Y = i, Flags = MouseFlags.ReportMousePosition, View = menu }
                                                     )
                              );
@@ -2427,7 +2411,7 @@ Edit
             {
                 // Edit menu is open. Click on the menu at Y = i.
                 Assert.True (
-                             mCurrent.OnMouseEvent (
+                             mCurrent.NewMouseEvent (
                                                   new MouseEvent { X = 10, Y = i, Flags = MouseFlags.ReportMousePosition, View = mCurrent }
                                                  )
                             );
@@ -2590,14 +2574,14 @@ Edit
         Application.Begin (top);
 
         Assert.True (tf.HasFocus);
-        Assert.True (menu.OnMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
+        Assert.True (menu.NewMouseEvent (new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
         Assert.True (menu.IsMenuOpen);
         Assert.False (tf.HasFocus);
         top.Draw ();
         TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), _output);
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 8, Y = 0, Flags = MouseFlags.ReportMousePosition, View = menu }
                                      )
                     );
@@ -2607,7 +2591,7 @@ Edit
         TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), _output);
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 15, Y = 0, Flags = MouseFlags.ReportMousePosition, View = menu }
                                      )
                     );
@@ -2617,7 +2601,7 @@ Edit
         TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (2), _output);
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 8, Y = 0, Flags = MouseFlags.ReportMousePosition, View = menu }
                                      )
                     );
@@ -2627,7 +2611,7 @@ Edit
         TestHelpers.AssertDriverContentsAre (expectedMenu.ClosedMenuText, _output);
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.ReportMousePosition, View = menu }
                                      )
                     );
@@ -2636,7 +2620,7 @@ Edit
         top.Draw ();
         TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), _output);
 
-        Assert.True (menu.OnMouseEvent (new MouseEvent { X = 8, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
+        Assert.True (menu.NewMouseEvent (new MouseEvent { X = 8, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }));
         Assert.False (menu.IsMenuOpen);
         Assert.True (tf.HasFocus);
         top.Draw ();
@@ -2969,7 +2953,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 8, 1), pos);
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
@@ -2988,7 +2972,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 10, 6), pos);
 
         Assert.False (
-                      menu.OnMouseEvent (
+                      menu.NewMouseEvent (
                                        new MouseEvent
                                        {
                                            X = 1, Y = 2, Flags = MouseFlags.ReportMousePosition, View = Application.Top.Subviews [1]
@@ -3011,7 +2995,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 25, 7), pos);
 
         Assert.False (
-                      menu.OnMouseEvent (
+                      menu.NewMouseEvent (
                                        new MouseEvent
                                        {
                                            X = 1, Y = 1, Flags = MouseFlags.ReportMousePosition, View = Application.Top.Subviews [1]
@@ -3033,7 +3017,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 10, 6), pos);
 
         Assert.False (
-                      menu.OnMouseEvent (
+                      menu.NewMouseEvent (
                                        new MouseEvent { X = 70, Y = 2, Flags = MouseFlags.Button1Clicked, View = Application.Top }
                                       )
                      );
@@ -3279,7 +3263,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 8, 1), pos);
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
@@ -3298,7 +3282,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 10, 6), pos);
 
         Assert.False (
-                      menu.OnMouseEvent (
+                      menu.NewMouseEvent (
                                        new MouseEvent { X = 1, Y = 2, Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [1] }
                                       )
                      );
@@ -3318,7 +3302,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 15, 7), pos);
 
         Assert.False (
-                      menu.OnMouseEvent (
+                      menu.NewMouseEvent (
                                        new MouseEvent { X = 1, Y = 1, Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [2] }
                                       )
                      );
@@ -3337,7 +3321,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 10, 6), pos);
 
         Assert.False (
-                      menu.OnMouseEvent (
+                      menu.NewMouseEvent (
                                        new MouseEvent { X = 70, Y = 2, Flags = MouseFlags.Button1Clicked, View = Application.Top }
                                       )
                      );
@@ -3475,7 +3459,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 8, 1), pos);
 
         Assert.True (
-                     menu.OnMouseEvent (
+                     menu.NewMouseEvent (
                                       new MouseEvent { X = 1, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu }
                                      )
                     );
@@ -3492,7 +3476,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 8, 4), pos);
 
         Assert.False (
-                      menu.OnMouseEvent (
+                      menu.NewMouseEvent (
                                        new MouseEvent { X = 1, Y = 2, Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [1] }
                                       )
                      );
@@ -3510,7 +3494,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 13, 5), pos);
 
         Assert.False (
-                      menu.OnMouseEvent (
+                      menu.NewMouseEvent (
                                        new MouseEvent { X = 1, Y = 1, Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [2] }
                                       )
                      );
@@ -3527,7 +3511,7 @@ Edit
         Assert.Equal (new Rectangle (1, 0, 8, 4), pos);
 
         Assert.False (
-                      menu.OnMouseEvent (
+                      menu.NewMouseEvent (
                                        new MouseEvent { X = 70, Y = 2, Flags = MouseFlags.Button1Clicked, View = Application.Top }
                                       )
                      );
@@ -3710,7 +3694,7 @@ Edit
         top.Add (menu, btn);
         Application.Begin (top);
 
-        Application.OnMouseEvent (new (new () { X = 0, Y = 4, Flags = MouseFlags.Button1Clicked }));
+        Application.OnMouseEvent (new () { X = 0, Y = 4, Flags = MouseFlags.Button1Clicked });
         Assert.True (btnClicked);
     }
 }

+ 8 - 16
UnitTests/Views/OverlappedTests.cs

@@ -944,11 +944,7 @@ public class OverlappedTests
                                                attributes
                                               );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 1, Y = 1, Flags = MouseFlags.Button1Pressed }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 1, Y = 1, Flags = MouseFlags.Button1Pressed });
         Assert.Equal (win2.Border, Application.MouseGrabView);
 
         Application.RunIteration (ref rsOverlapped, ref firstIteration);
@@ -960,17 +956,13 @@ public class OverlappedTests
         Assert.Equal (win2, Application.Current);
         Assert.Equal (win1, rsWin1.Toplevel);
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = 2,
-                                                               Y = 2,
-                                                               Flags = MouseFlags.Button1Pressed
-                                                                       | MouseFlags.ReportMousePosition
-                                                           }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent
+        {
+            X = 2,
+            Y = 2,
+            Flags = MouseFlags.Button1Pressed
+                    | MouseFlags.ReportMousePosition
+        });
 
         Application.RunIteration (ref rsOverlapped, ref firstIteration);
 

+ 2 - 10
UnitTests/Views/ScrollBarViewTests.cs

@@ -1154,11 +1154,7 @@ This is a test             ",
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 15, Y = 0, Flags = MouseFlags.Button1Clicked }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 15, Y = 0, Flags = MouseFlags.Button1Clicked });
 
         Assert.Null (Application.MouseGrabView);
         Assert.True (clicked);
@@ -1186,11 +1182,7 @@ This is a test             ",
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 15, Y = 0, Flags = MouseFlags.Button1Clicked }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 15, Y = 0, Flags = MouseFlags.Button1Clicked });
 
         Assert.Null (Application.MouseGrabView);
         Assert.True (clicked);

+ 10 - 28
UnitTests/Views/TabViewTests.cs

@@ -141,32 +141,26 @@ public class TabViewTests
         top.Add (tv);
         Application.Begin (top);
 
-        MouseEventEventArgs args;
+        MouseEvent args;
 
         // Waving mouse around does not trigger click
         for (var i = 0; i < 100; i++)
         {
-            args = new MouseEventEventArgs (
-                                            new MouseEvent { X = i, Y = 1, Flags = MouseFlags.ReportMousePosition }
-                                           );
+            args = new MouseEvent { X = i, Y = 1, Flags = MouseFlags.ReportMousePosition };
             Application.OnMouseEvent (args);
             Application.Refresh ();
             Assert.Null (clicked);
             Assert.Equal (tab1, tv.SelectedTab);
         }
 
-        args = new MouseEventEventArgs (
-                                        new MouseEvent { X = 3, Y = 1, Flags = MouseFlags.Button1Clicked }
-                                       );
+        args = new MouseEvent { X = 3, Y = 1, Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Equal (tab1, clicked);
         Assert.Equal (tab1, tv.SelectedTab);
 
         // Click to tab2
-        args = new MouseEventEventArgs (
-                                        new MouseEvent { X = 6, Y = 1, Flags = MouseFlags.Button1Clicked }
-                                       );
+        args = new MouseEvent { X = 6, Y = 1, Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Equal (tab2, clicked);
@@ -179,9 +173,7 @@ public class TabViewTests
                              e.MouseEvent.Handled = true;
                          };
 
-        args = new MouseEventEventArgs (
-                                        new MouseEvent { X = 3, Y = 1, Flags = MouseFlags.Button1Clicked }
-                                       );
+        args = new MouseEvent { X = 3, Y = 1, Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
 
@@ -189,9 +181,7 @@ public class TabViewTests
         Assert.Equal (tab1, clicked);
         Assert.Equal (tab2, tv.SelectedTab);
 
-        args = new MouseEventEventArgs (
-                                        new MouseEvent { X = 12, Y = 1, Flags = MouseFlags.Button1Clicked }
-                                       );
+        args = new MouseEvent { X = 12, Y = 1, Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
 
@@ -245,9 +235,7 @@ public class TabViewTests
         Application.Begin (top);
 
         // Click the right arrow
-        var args = new MouseEventEventArgs (
-                                            new MouseEvent { X = 6, Y = 2, Flags = MouseFlags.Button1Clicked }
-                                           );
+        var args = new MouseEvent { X = 6, Y = 2, Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Null (clicked);
@@ -267,9 +255,7 @@ public class TabViewTests
                                             );
 
         // Click the left arrow
-        args = new MouseEventEventArgs (
-                                        new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.Button1Clicked }
-                                       );
+        args = new MouseEvent { X = 0, Y = 2, Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Null (clicked);
@@ -339,9 +325,7 @@ public class TabViewTests
         Application.Begin (top);
 
         // Click the right arrow
-        var args = new MouseEventEventArgs (
-                                            new MouseEvent { X = 7, Y = 3, Flags = MouseFlags.Button1Clicked }
-                                           );
+        var args = new MouseEvent { X = 7, Y = 3, Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Null (clicked);
@@ -363,9 +347,7 @@ public class TabViewTests
                                             );
 
         // Click the left arrow
-        args = new MouseEventEventArgs (
-                                        new MouseEvent { X = 1, Y = 3, Flags = MouseFlags.Button1Clicked }
-                                       );
+        args = new MouseEvent { X = 1, Y = 3, Flags = MouseFlags.Button1Clicked };
         Application.OnMouseEvent (args);
         Application.Refresh ();
         Assert.Null (clicked);

+ 5 - 5
UnitTests/Views/TextFieldTests.cs

@@ -1039,13 +1039,13 @@ public class TextFieldTests
 
         var mouseEvent = new MouseEvent { Flags = MouseFlags.Button1Clicked, View = tf };
 
-        Application.OnMouseEvent (new MouseEventEventArgs (mouseEvent));
+        Application.OnMouseEvent (mouseEvent);
         Assert.Equal (1, clickCounter);
 
         // Get a fresh instance that represents a right click.
         // Should be ignored because of SuppressRightClick callback
         mouseEvent = new MouseEvent { Flags = MouseFlags.Button3Clicked, View = tf };
-        Application.OnMouseEvent (new MouseEventEventArgs (mouseEvent));
+        Application.OnMouseEvent (mouseEvent);
         Assert.Equal (1, clickCounter);
 
         Application.MouseEvent -= HandleRightClick;
@@ -1058,14 +1058,14 @@ public class TextFieldTests
         // This call causes the context menu to pop, and MouseEvent() returns true.
         // Thus, the clickCounter is NOT incremented.
         // Which is correct, because the user did NOT click with the left mouse button.
-        Application.OnMouseEvent (new MouseEventEventArgs (mouseEvent));
+        Application.OnMouseEvent (mouseEvent);
         Assert.Equal (1, clickCounter);
 
         return;
 
-        void HandleRightClick (object sender, MouseEventEventArgs arg)
+        void HandleRightClick (object sender, MouseEvent arg)
         {
-            if (arg.MouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked))
+            if (arg.Flags.HasFlag (MouseFlags.Button3Clicked))
             {
                 arg.Handled = true;
             }

+ 100 - 202
UnitTests/Views/ToplevelTests.cs

@@ -274,7 +274,7 @@ public class ToplevelTests
         Assert.NotNull (top.MenuBar);
 
         // Application.Top with a menu and without status bar.
-        View.GetLocationEnsuringFullVisibility (top, 2, 2, out nx, out ny,  out sb);
+        View.GetLocationEnsuringFullVisibility (top, 2, 2, out nx, out ny, out sb);
         Assert.Equal (0, nx);
         Assert.Equal (1, ny);
         Assert.Null (sb);
@@ -383,7 +383,7 @@ public class ToplevelTests
 
         //Assert.Null (Toplevel._dragPosition);
         win.OnMouseEvent (new MouseEvent { X = 6, Y = 0, Flags = MouseFlags.Button1Pressed });
-       // Assert.Equal (new Point (6, 0), Toplevel._dragPosition);
+        // Assert.Equal (new Point (6, 0), Toplevel._dragPosition);
         win.OnMouseEvent (new MouseEvent { X = 6, Y = 0, Flags = MouseFlags.Button1Released });
         //Assert.Null (Toplevel._dragPosition);
         win.CanFocus = false;
@@ -893,11 +893,7 @@ public class ToplevelTests
                                          Assert.Null (Application.MouseGrabView);
 
                                          // Grab the mouse
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent { X = 3, Y = 2, Flags = MouseFlags.Button1Pressed }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new () { X = 3, Y = 2, Flags = MouseFlags.Button1Pressed });
 
                                          Assert.Equal (Application.Current.Border, Application.MouseGrabView);
                                          Assert.Equal (new Rectangle (2, 2, 10, 3), Application.Current.Frame);
@@ -907,17 +903,13 @@ public class ToplevelTests
                                          Assert.Equal (Application.Current.Border, Application.MouseGrabView);
 
                                          // Drag to left
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent
-                                                                                            {
-                                                                                                X = 2,
-                                                                                                Y = 2,
-                                                                                                Flags = MouseFlags.Button1Pressed
-                                                                                                        | MouseFlags.ReportMousePosition
-                                                                                            }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new ()
+                                         {
+                                             X = 2,
+                                             Y = 2,
+                                             Flags = MouseFlags.Button1Pressed
+                                                     | MouseFlags.ReportMousePosition
+                                         });
                                          Application.Refresh ();
 
                                          Assert.Equal (Application.Current.Border, Application.MouseGrabView);
@@ -946,17 +938,13 @@ public class ToplevelTests
                                          Assert.Equal (Application.Current.Border, Application.MouseGrabView);
 
                                          // Drag up
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent
-                                                                                            {
-                                                                                                X = 2,
-                                                                                                Y = 1,
-                                                                                                Flags = MouseFlags.Button1Pressed
-                                                                                                        | MouseFlags.ReportMousePosition
-                                                                                            }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new ()
+                                         {
+                                             X = 2,
+                                             Y = 1,
+                                             Flags = MouseFlags.Button1Pressed
+                                                     | MouseFlags.ReportMousePosition
+                                         });
                                          Application.Refresh ();
 
                                          Assert.Equal (Application.Current.Border, Application.MouseGrabView);
@@ -986,11 +974,7 @@ public class ToplevelTests
                                          Assert.Equal (Application.Current.Border, Application.MouseGrabView);
 
                                          // Ungrab the mouse
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent { X = 2, Y = 1, Flags = MouseFlags.Button1Released }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new () { X = 2, Y = 1, Flags = MouseFlags.Button1Released });
                                          Application.Refresh ();
 
                                          Assert.Null (Application.MouseGrabView);
@@ -1038,15 +1022,11 @@ public class ToplevelTests
                                          Assert.Null (Application.MouseGrabView);
 
                                          // Grab the mouse
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent
-                                                                                            {
-                                                                                                X = win.Frame.X, Y = win.Frame.Y,
-                                                                                                Flags = MouseFlags.Button1Pressed
-                                                                                            }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new MouseEvent
+                                         {
+                                             X = win.Frame.X, Y = win.Frame.Y,
+                                             Flags = MouseFlags.Button1Pressed
+                                         });
 
                                          Assert.Equal (win.Border, Application.MouseGrabView);
                                      }
@@ -1058,17 +1038,13 @@ public class ToplevelTests
                                          movex = 1;
                                          movey = 0;
 
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent
-                                                                                            {
-                                                                                                X = win.Frame.X + movex,
-                                                                                                Y = win.Frame.Y + movey,
-                                                                                                Flags = MouseFlags.Button1Pressed
-                                                                                                        | MouseFlags.ReportMousePosition
-                                                                                            }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new MouseEvent
+                                         {
+                                             X = win.Frame.X + movex,
+                                             Y = win.Frame.Y + movey,
+                                             Flags = MouseFlags.Button1Pressed
+                                                     | MouseFlags.ReportMousePosition
+                                         });
 
                                          Assert.Equal (win.Border, Application.MouseGrabView);
                                      }
@@ -1087,17 +1063,13 @@ public class ToplevelTests
                                          movex = 0;
                                          movey = -1;
 
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent
-                                                                                            {
-                                                                                                X = win.Frame.X + movex,
-                                                                                                Y = win.Frame.Y + movey,
-                                                                                                Flags = MouseFlags.Button1Pressed
-                                                                                                        | MouseFlags.ReportMousePosition
-                                                                                            }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new MouseEvent
+                                         {
+                                             X = win.Frame.X + movex,
+                                             Y = win.Frame.Y + movey,
+                                             Flags = MouseFlags.Button1Pressed
+                                                     | MouseFlags.ReportMousePosition
+                                         });
 
                                          Assert.Equal (win.Border, Application.MouseGrabView);
                                      }
@@ -1116,15 +1088,11 @@ public class ToplevelTests
                                          movex = 0;
                                          movey = 0;
 
-                                         Application.OnMouseEvent (
-                                                                   new MouseEventEventArgs (
-                                                                                            new MouseEvent
-                                                                                            {
-                                                                                                X = win.Frame.X + movex, Y = win.Frame.Y + movey,
-                                                                                                Flags = MouseFlags.Button1Released
-                                                                                            }
-                                                                                           )
-                                                                  );
+                                         Application.OnMouseEvent (new MouseEvent
+                                         {
+                                             X = win.Frame.X + movex, Y = win.Frame.Y + movey,
+                                             Flags = MouseFlags.Button1Released
+                                         });
 
                                          Assert.Null (Application.MouseGrabView);
                                      }
@@ -1427,25 +1395,11 @@ public class ToplevelTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 6, Y = 6, Flags = MouseFlags.Button1Pressed }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 6, Y = 6, Flags = MouseFlags.Button1Pressed });
         Assert.Equal (win.Border, Application.MouseGrabView);
         Assert.Equal (new (3, 3, 194, 94), win.Frame);
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = 9,
-                                                               Y = 9,
-                                                               Flags = MouseFlags.Button1Pressed
-                                                                       | MouseFlags.ReportMousePosition
-                                                           }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 9, Y = 9, Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
         Assert.Equal (win.Border, Application.MouseGrabView);
         top.SetNeedsLayout ();
         top.LayoutSubviews ();
@@ -1473,17 +1427,13 @@ public class ToplevelTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = 5,
-                                                               Y = 5,
-                                                               Flags = MouseFlags.Button1Pressed
-                                                                       | MouseFlags.ReportMousePosition
-                                                           }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent
+        {
+            X = 5,
+            Y = 5,
+            Flags = MouseFlags.Button1Pressed
+                    | MouseFlags.ReportMousePosition
+        });
         Assert.Equal (win.Border, Application.MouseGrabView);
         top.SetNeedsLayout ();
         top.LayoutSubviews ();
@@ -1511,19 +1461,11 @@ public class ToplevelTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 5, Y = 5, Flags = MouseFlags.Button1Released }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 5, Y = 5, Flags = MouseFlags.Button1Released });
         // ScrollView always grab the mouse when the container's subview OnMouseEnter don't want grab the mouse
         Assert.Equal (scrollView, Application.MouseGrabView);
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 4, Y = 4, Flags = MouseFlags.ReportMousePosition }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 4, Y = 4, Flags = MouseFlags.ReportMousePosition });
         Assert.Equal (scrollView, Application.MouseGrabView);
     }
 
@@ -1551,25 +1493,17 @@ public class ToplevelTests
 
         Assert.Null (Application.MouseGrabView);
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed });
 
         Assert.Equal (window.Border, Application.MouseGrabView);
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = -11,
-                                                               Y = -4,
-                                                               Flags = MouseFlags.Button1Pressed
-                                                                       | MouseFlags.ReportMousePosition
-                                                           }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent
+        {
+            X = -11,
+            Y = -4,
+            Flags = MouseFlags.Button1Pressed
+                    | MouseFlags.ReportMousePosition
+        });
 
         Application.Refresh ();
         Assert.Equal (new Rectangle (0, 0, 40, 10), top.Frame);
@@ -1587,17 +1521,13 @@ public class ToplevelTests
         // Changes Top size to same size as Dialog more menu and scroll bar
         ((FakeDriver)Application.Driver).SetBufferSize (20, 3);
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = -1,
-                                                               Y = -1,
-                                                               Flags = MouseFlags.Button1Pressed
-                                                                       | MouseFlags.ReportMousePosition
-                                                           }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent
+        {
+            X = -1,
+            Y = -1,
+            Flags = MouseFlags.Button1Pressed
+                    | MouseFlags.ReportMousePosition
+        });
 
         Application.Refresh ();
         Assert.Equal (new Rectangle (0, 0, 20, 3), top.Frame);
@@ -1615,17 +1545,13 @@ public class ToplevelTests
         // Changes Top size smaller than Dialog size
         ((FakeDriver)Application.Driver).SetBufferSize (19, 2);
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = -1,
-                                                               Y = -1,
-                                                               Flags = MouseFlags.Button1Pressed
-                                                                       | MouseFlags.ReportMousePosition
-                                                           }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent
+        {
+            X = -1,
+            Y = -1,
+            Flags = MouseFlags.Button1Pressed
+                    | MouseFlags.ReportMousePosition
+        });
 
         Application.Refresh ();
         Assert.Equal (new Rectangle (0, 0, 19, 2), top.Frame);
@@ -1639,17 +1565,13 @@ public class ToplevelTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = 18,
-                                                               Y = 1,
-                                                               Flags = MouseFlags.Button1Pressed
-                                                                       | MouseFlags.ReportMousePosition
-                                                           }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent
+        {
+            X = 18,
+            Y = 1,
+            Flags = MouseFlags.Button1Pressed
+                    | MouseFlags.ReportMousePosition
+        });
 
         Application.Refresh ();
         Assert.Equal (new Rectangle (0, 0, 19, 2), top.Frame);
@@ -1662,17 +1584,13 @@ public class ToplevelTests
                                                      );
 
         // On a real app we can't go beyond the SuperView bounds
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = 19,
-                                                               Y = 2,
-                                                               Flags = MouseFlags.Button1Pressed
-                                                                       | MouseFlags.ReportMousePosition
-                                                           }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent
+        {
+            X = 19,
+            Y = 2,
+            Flags = MouseFlags.Button1Pressed
+                    | MouseFlags.ReportMousePosition
+        });
 
         Application.Refresh ();
         Assert.Equal (new Rectangle (0, 0, 19, 2), top.Frame);
@@ -1717,11 +1635,7 @@ public class ToplevelTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent { X = 0, Y = 0, Flags = MouseFlags.Button1Pressed });
 
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1737,17 +1651,13 @@ public class ToplevelTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent
-                                                           {
-                                                               X = 1,
-                                                               Y = 1,
-                                                               Flags = MouseFlags.Button1Pressed
-                                                                       | MouseFlags.ReportMousePosition
-                                                           }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new MouseEvent
+        {
+            X = 1,
+            Y = 1,
+            Flags = MouseFlags.Button1Pressed
+                    | MouseFlags.ReportMousePosition
+        });
 
         firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1868,11 +1778,7 @@ public class ToplevelTests
                                                       @$"
 ┌──────────────────┐
 │ ┌─────────────┐  │
-│ │{
-    CM.Glyphs.LeftBracket
-} Popup {
-    CM.Glyphs.RightBracket
-}    │  │
+│ │{CM.Glyphs.LeftBracket} Popup {CM.Glyphs.RightBracket}    │  │
 │ │             │  │
 │ │             │  │
 │ │             │  │
@@ -1893,11 +1799,7 @@ public class ToplevelTests
                                                       _output
                                                      );
 
-        Application.OnMouseEvent (
-                                  new MouseEventEventArgs (
-                                                           new MouseEvent { X = 5, Y = 2, Flags = MouseFlags.Button1Clicked }
-                                                          )
-                                 );
+        Application.OnMouseEvent (new () { X = 5, Y = 2, Flags = MouseFlags.Button1Clicked });
         Application.Top.Draw ();
 
         var firstIteration = false;
@@ -1907,11 +1809,7 @@ public class ToplevelTests
                                                       @$"
 ┌──────────────────┐
 │ ┌─────────────┐  │
-│ │{
-    CM.Glyphs.LeftBracket
-} Popup {
-    CM.Glyphs.RightBracket
-}    │  │
+│ │{CM.Glyphs.LeftBracket} Popup {CM.Glyphs.RightBracket}    │  │
 │┌────────────────┐│
 ││viewAddedToTop  ││
 ││                ││

+ 4 - 4
UnitTests/Views/TreeTableSourceTests.cs

@@ -108,7 +108,7 @@ public class TreeTableSourceTests : IDisposable
         Assert.Equal (0, tv.SelectedRow);
         Assert.Equal (0, tv.SelectedColumn);
 
-        Assert.True (tv.OnMouseEvent (new MouseEvent { X = 2, Y = 2, Flags = MouseFlags.Button1Clicked }));
+        Assert.True (tv.NewMouseEvent (new MouseEvent { X = 2, Y = 2, Flags = MouseFlags.Button1Clicked }));
 
         tv.Draw ();
 
@@ -125,15 +125,15 @@ public class TreeTableSourceTests : IDisposable
         TestHelpers.AssertDriverContentsAre (expected, _output);
 
         // Clicking to the right/left of the expand/collapse does nothing
-        tv.OnMouseEvent (new MouseEvent { X = 3, Y = 2, Flags = MouseFlags.Button1Clicked });
+        tv.NewMouseEvent (new MouseEvent { X = 3, Y = 2, Flags = MouseFlags.Button1Clicked });
         tv.Draw ();
         TestHelpers.AssertDriverContentsAre (expected, _output);
-        tv.OnMouseEvent (new MouseEvent { X = 1, Y = 2, Flags = MouseFlags.Button1Clicked });
+        tv.NewMouseEvent (new MouseEvent { X = 1, Y = 2, Flags = MouseFlags.Button1Clicked });
         tv.Draw ();
         TestHelpers.AssertDriverContentsAre (expected, _output);
 
         // Clicking on the + again should collapse
-        tv.OnMouseEvent (new MouseEvent { X = 2, Y = 2, Flags = MouseFlags.Button1Clicked });
+        tv.NewMouseEvent (new MouseEvent { X = 2, Y = 2, Flags = MouseFlags.Button1Clicked });
         tv.Draw ();
 
         expected =