Browse Source

Merge pull request #3797 from tig/v2_3029-MouseEvents

Fixes #3029 - Refactors `MouseEvent` and APIs to simplify and make consistent
Tig 9 months ago
parent
commit
0a108fa110
83 changed files with 627 additions and 593 deletions
  1. 1 1
      Terminal.Gui/Application/Application.Initialization.cs
  2. 40 29
      Terminal.Gui/Application/Application.Mouse.cs
  3. 2 2
      Terminal.Gui/ConsoleDrivers/ConsoleDriver.cs
  4. 1 1
      Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs
  5. 3 3
      Terminal.Gui/ConsoleDrivers/NetDriver.cs
  6. 5 5
      Terminal.Gui/ConsoleDrivers/WindowsDriver.cs
  7. 101 0
      Terminal.Gui/Input/MouseEventArgs.cs
  8. 0 32
      Terminal.Gui/Input/MouseEventEventArgs.cs
  9. 2 49
      Terminal.Gui/Input/MouseFlags.cs
  10. 1 1
      Terminal.Gui/Text/Autocomplete/AppendAutocomplete.cs
  11. 1 1
      Terminal.Gui/Text/Autocomplete/AutocompleteBase.cs
  12. 1 1
      Terminal.Gui/Text/Autocomplete/IAutocomplete.cs
  13. 1 1
      Terminal.Gui/Text/Autocomplete/PopupAutocomplete.PopUp.cs
  14. 2 2
      Terminal.Gui/Text/Autocomplete/PopupAutocomplete.cs
  15. 2 7
      Terminal.Gui/View/Adornment/Border.cs
  16. 1 1
      Terminal.Gui/View/Adornment/Padding.cs
  17. 96 85
      Terminal.Gui/View/View.Mouse.cs
  18. 5 5
      Terminal.Gui/Views/Bar.cs
  19. 1 1
      Terminal.Gui/Views/Button.cs
  20. 2 3
      Terminal.Gui/Views/ColorBar.cs
  21. 2 2
      Terminal.Gui/Views/ColorPicker.16.cs
  22. 6 5
      Terminal.Gui/Views/ComboBox.cs
  23. 8 5
      Terminal.Gui/Views/DateField.cs
  24. 9 9
      Terminal.Gui/Views/FileDialog.cs
  25. 1 1
      Terminal.Gui/Views/FrameView.cs
  26. 1 1
      Terminal.Gui/Views/HexView.cs
  27. 1 1
      Terminal.Gui/Views/Label.cs
  28. 1 1
      Terminal.Gui/Views/ListView.cs
  29. 5 3
      Terminal.Gui/Views/Menu/Menu.cs
  30. 4 4
      Terminal.Gui/Views/Menu/MenuBar.cs
  31. 5 5
      Terminal.Gui/Views/RadioGroup.cs
  32. 8 8
      Terminal.Gui/Views/ScrollBarView.cs
  33. 6 6
      Terminal.Gui/Views/ScrollView.cs
  34. 2 4
      Terminal.Gui/Views/Slider.cs
  35. 3 3
      Terminal.Gui/Views/TabMouseEventArgs.cs
  36. 6 14
      Terminal.Gui/Views/TabView.cs
  37. 3 3
      Terminal.Gui/Views/TableView/CheckBoxTableSourceWrapper.cs
  38. 4 4
      Terminal.Gui/Views/TableView/TableView.cs
  39. 2 2
      Terminal.Gui/Views/TableView/TreeTableSource.cs
  40. 4 5
      Terminal.Gui/Views/TextField.cs
  41. 1 1
      Terminal.Gui/Views/TextValidateField.cs
  42. 4 10
      Terminal.Gui/Views/TextView.cs
  43. 1 1
      Terminal.Gui/Views/TileView.cs
  44. 8 5
      Terminal.Gui/Views/TimeField.cs
  45. 1 1
      Terminal.Gui/Views/Toplevel.cs
  46. 4 8
      Terminal.Gui/Views/TreeView/TreeView.cs
  47. 4 4
      UICatalog/Scenarios/ASCIICustomButton.cs
  48. 1 1
      UICatalog/Scenarios/AdornmentsEditor.cs
  49. 1 1
      UICatalog/Scenarios/ArrangementEditor.cs
  50. 8 8
      UICatalog/Scenarios/Bars.cs
  51. 9 11
      UICatalog/Scenarios/CharacterMap.cs
  52. 5 5
      UICatalog/Scenarios/ContentScrolling.cs
  53. 3 3
      UICatalog/Scenarios/ContextMenus.cs
  54. 10 6
      UICatalog/Scenarios/LineDrawing.cs
  55. 1 1
      UICatalog/Scenarios/ListColumns.cs
  56. 3 3
      UICatalog/Scenarios/Mouse.cs
  57. 5 5
      UICatalog/Scenarios/TableEditor.cs
  58. 5 5
      UICatalog/Scenarios/TreeViewFileSystem.cs
  59. 3 3
      UnitTests/Application/ApplicationTests.cs
  60. 3 3
      UnitTests/Application/Mouse/ApplicationMouseEnterLeaveTests.cs
  61. 16 16
      UnitTests/Application/Mouse/ApplicationMouseTests.cs
  62. 2 2
      UnitTests/Input/EscSeqUtilsTests.cs
  63. 1 1
      UnitTests/Input/ResponderTests.cs
  64. 5 5
      UnitTests/View/Mouse/MouseEnterLeaveTests.cs
  65. 26 20
      UnitTests/View/Mouse/MouseTests.cs
  66. 5 5
      UnitTests/Views/ButtonTests.cs
  67. 6 6
      UnitTests/Views/ColorPickerTests.cs
  68. 27 27
      UnitTests/Views/ComboBoxTests.cs
  69. 21 21
      UnitTests/Views/ContextMenuTests.cs
  70. 3 3
      UnitTests/Views/LabelTests.cs
  71. 5 5
      UnitTests/Views/ListViewTests.cs
  72. 5 5
      UnitTests/Views/MenuBarTests.cs
  73. 2 2
      UnitTests/Views/ScrollBarViewTests.cs
  74. 4 4
      UnitTests/Views/ShortcutTests.cs
  75. 12 12
      UnitTests/Views/TabViewTests.cs
  76. 6 6
      UnitTests/Views/TextFieldTests.cs
  77. 1 1
      UnitTests/Views/TextValidateFieldTests.cs
  78. 17 17
      UnitTests/Views/TextViewTests.cs
  79. 22 22
      UnitTests/Views/ToplevelTests.cs
  80. 4 4
      UnitTests/Views/TreeTableSourceTests.cs
  81. 4 4
      UnitTests/Views/TreeViewTests.cs
  82. 2 2
      docfx/docs/migratingfromv1.md
  83. 2 2
      docfx/docs/mouse.md

+ 1 - 1
Terminal.Gui/Application/Application.Initialization.cs

@@ -180,7 +180,7 @@ public static partial class Application // Initialization (Init/Shutdown)
     private static void Driver_SizeChanged (object? sender, SizeChangedEventArgs e) { OnSizeChanging (e); }
     private static void Driver_SizeChanged (object? sender, SizeChangedEventArgs e) { OnSizeChanging (e); }
     private static void Driver_KeyDown (object? sender, Key e) { RaiseKeyDownEvent (e); }
     private static void Driver_KeyDown (object? sender, Key e) { RaiseKeyDownEvent (e); }
     private static void Driver_KeyUp (object? sender, Key e) { RaiseKeyUpEvent (e); }
     private static void Driver_KeyUp (object? sender, Key e) { RaiseKeyUpEvent (e); }
-    private static void Driver_MouseEvent (object? sender, MouseEvent e) { OnMouseEvent (e); }
+    private static void Driver_MouseEvent (object? sender, MouseEventArgs e) { RaiseMouseEvent (e); }
 
 
     /// <summary>Gets of list of <see cref="ConsoleDriver"/> types that are available.</summary>
     /// <summary>Gets of list of <see cref="ConsoleDriver"/> types that are available.</summary>
     /// <returns></returns>
     /// <returns></returns>

+ 40 - 29
Terminal.Gui/Application/Application.Mouse.cs

@@ -1,6 +1,5 @@
 #nullable enable
 #nullable enable
 using System.ComponentModel;
 using System.ComponentModel;
-using System.Diagnostics;
 
 
 namespace Terminal.Gui;
 namespace Terminal.Gui;
 
 
@@ -45,12 +44,12 @@ public static partial class Application // Mouse handling
     /// <param name="view">View that will receive all mouse events until <see cref="UngrabMouse"/> is invoked.</param>
     /// <param name="view">View that will receive all mouse events until <see cref="UngrabMouse"/> is invoked.</param>
     public static void GrabMouse (View? view)
     public static void GrabMouse (View? view)
     {
     {
-        if (view is null || OnGrabbingMouse (view))
+        if (view is null || RaiseGrabbingMouseEvent (view))
         {
         {
             return;
             return;
         }
         }
 
 
-        OnGrabbedMouse (view);
+        RaiseGrabbedMouseEvent (view);
         MouseGrabView = view;
         MouseGrabView = view;
     }
     }
 
 
@@ -66,16 +65,16 @@ public static partial class Application // Mouse handling
         ObjectDisposedException.ThrowIf (MouseGrabView.WasDisposed, MouseGrabView);
         ObjectDisposedException.ThrowIf (MouseGrabView.WasDisposed, MouseGrabView);
 #endif
 #endif
 
 
-        if (!OnUnGrabbingMouse (MouseGrabView))
+        if (!RaiseUnGrabbingMouseEvent (MouseGrabView))
         {
         {
             View view = MouseGrabView;
             View view = MouseGrabView;
             MouseGrabView = null;
             MouseGrabView = null;
-            OnUnGrabbedMouse (view);
+            RaiseUnGrabbedMouseEvent (view);
         }
         }
     }
     }
 
 
     /// <exception cref="Exception">A delegate callback throws an exception.</exception>
     /// <exception cref="Exception">A delegate callback throws an exception.</exception>
-    private static bool OnGrabbingMouse (View? view)
+    private static bool RaiseGrabbingMouseEvent (View? view)
     {
     {
         if (view is null)
         if (view is null)
         {
         {
@@ -89,7 +88,7 @@ public static partial class Application // Mouse handling
     }
     }
 
 
     /// <exception cref="Exception">A delegate callback throws an exception.</exception>
     /// <exception cref="Exception">A delegate callback throws an exception.</exception>
-    private static bool OnUnGrabbingMouse (View? view)
+    private static bool RaiseUnGrabbingMouseEvent (View? view)
     {
     {
         if (view is null)
         if (view is null)
         {
         {
@@ -103,7 +102,7 @@ public static partial class Application // Mouse handling
     }
     }
 
 
     /// <exception cref="Exception">A delegate callback throws an exception.</exception>
     /// <exception cref="Exception">A delegate callback throws an exception.</exception>
-    private static void OnGrabbedMouse (View? view)
+    private static void RaiseGrabbedMouseEvent (View? view)
     {
     {
         if (view is null)
         if (view is null)
         {
         {
@@ -114,7 +113,7 @@ public static partial class Application // Mouse handling
     }
     }
 
 
     /// <exception cref="Exception">A delegate callback throws an exception.</exception>
     /// <exception cref="Exception">A delegate callback throws an exception.</exception>
-    private static void OnUnGrabbedMouse (View? view)
+    private static void RaiseUnGrabbedMouseEvent (View? view)
     {
     {
         if (view is null)
         if (view is null)
         {
         {
@@ -124,20 +123,14 @@ public static partial class Application // Mouse handling
         UnGrabbedMouse?.Invoke (view, new (view));
         UnGrabbedMouse?.Invoke (view, new (view));
     }
     }
 
 
-    /// <summary>Event fired when a mouse move or click occurs. Coordinates are screen relative.</summary>
-    /// <remarks>
-    ///     <para>
-    ///         Use this event to receive mouse events in screen coordinates. Use <see cref="MouseEvent"/> to
-    ///         receive mouse events relative to a <see cref="View.Viewport"/>.
-    ///     </para>
-    ///     <para>The <see cref="MouseEvent.View"/> will contain the <see cref="View"/> that contains the mouse coordinates.</para>
-    /// </remarks>
-    public static event EventHandler<MouseEvent>? MouseEvent;
 
 
-    /// <summary>Called when a mouse event is raised by the driver.</summary>
+    /// <summary>
+    ///     INTERNAL API: Called when a mouse event is raised by the driver. Determines the view under the mouse and
+    ///     calls the appropriate View mouse event handlers.
+    /// </summary>
     /// <remarks>This method can be used to simulate a mouse event, e.g. in unit tests.</remarks>
     /// <remarks>This method can be used to simulate a mouse event, e.g. in unit tests.</remarks>
     /// <param name="mouseEvent">The mouse event with coordinates relative to the screen.</param>
     /// <param name="mouseEvent">The mouse event with coordinates relative to the screen.</param>
-    internal static void OnMouseEvent (MouseEvent mouseEvent)
+    internal static void RaiseMouseEvent (MouseEventArgs mouseEvent)
     {
     {
         _lastMousePosition = mouseEvent.ScreenPosition;
         _lastMousePosition = mouseEvent.ScreenPosition;
 
 
@@ -177,9 +170,6 @@ public static partial class Application // Mouse handling
             return;
             return;
         }
         }
 
 
-        // We can combine this into the switch expression to reduce cognitive complexity even more and likely
-        // avoid one or two of these checks in the process, as well.
-
         WantContinuousButtonPressedView = deepestViewUnderMouse switch
         WantContinuousButtonPressedView = deepestViewUnderMouse switch
         {
         {
             { WantContinuousButtonPressed: true } => deepestViewUnderMouse,
             { WantContinuousButtonPressed: true } => deepestViewUnderMouse,
@@ -194,7 +184,7 @@ public static partial class Application // Mouse handling
         }
         }
 
 
         // Create a view-relative mouse event to send to the view that is under the mouse.
         // Create a view-relative mouse event to send to the view that is under the mouse.
-        MouseEvent? viewMouseEvent;
+        MouseEventArgs? viewMouseEvent;
 
 
         if (deepestViewUnderMouse is Adornment adornment)
         if (deepestViewUnderMouse is Adornment adornment)
         {
         {
@@ -208,7 +198,7 @@ public static partial class Application // Mouse handling
                 View = deepestViewUnderMouse
                 View = deepestViewUnderMouse
             };
             };
         }
         }
-        else if (deepestViewUnderMouse.ViewportToScreen (Rectangle.Empty with { Size = deepestViewUnderMouse.Viewport.Size }).Contains (mouseEvent.Position))
+        else if (deepestViewUnderMouse.ViewportToScreen (Rectangle.Empty with { Size = deepestViewUnderMouse.Viewport.Size }).Contains (mouseEvent.ScreenPosition))
         {
         {
             Point viewportLocation = deepestViewUnderMouse.ScreenToViewport (mouseEvent.ScreenPosition);
             Point viewportLocation = deepestViewUnderMouse.ScreenToViewport (mouseEvent.ScreenPosition);
 
 
@@ -224,7 +214,7 @@ public static partial class Application // Mouse handling
         {
         {
             // The mouse was outside any View's Viewport.
             // The mouse was outside any View's Viewport.
 
 
-           // Debug.Fail ("This should never happen. If it does please file an Issue!!");
+            // Debug.Fail ("This should never happen. If it does please file an Issue!!");
 
 
             return;
             return;
         }
         }
@@ -261,7 +251,29 @@ public static partial class Application // Mouse handling
         }
         }
     }
     }
 
 
-    internal static bool HandleMouseGrab (View? deepestViewUnderMouse, MouseEvent mouseEvent)
+
+#pragma warning disable CS1574 // XML comment has cref attribute that could not be resolved
+    /// <summary>
+    /// Raised when a mouse event occurs. Can be cancelled by setting <see cref="MouseEventArgs.Handled"/> to <see langword="true"/>.
+    /// </summary>
+    /// <remarks>
+    ///     <para>
+    ///         <see cref="MouseEventArgs.ScreenPosition"/> coordinates are screen-relative.
+    ///     </para>
+    ///     <para>
+    ///         <see cref="MouseEventArgs.View"/> will be the deepest view under the under the mouse.
+    ///     </para>
+    ///     <para>
+    ///         <see cref="MouseEventArgs.Position"/> coordinates are view-relative. Only valid if <see cref="MouseEventArgs.View"/> is set.
+    ///     </para>
+    ///     <para>
+    ///         Use this evento to handle mouse events at the application level, before View-specific handling.
+    ///     </para>
+    /// </remarks>
+    public static event EventHandler<MouseEventArgs>? MouseEvent;
+#pragma warning restore CS1574 // XML comment has cref attribute that could not be resolved
+
+    internal static bool HandleMouseGrab (View? deepestViewUnderMouse, MouseEventArgs mouseEvent)
     {
     {
         if (MouseGrabView is { })
         if (MouseGrabView is { })
         {
         {
@@ -276,7 +288,7 @@ public static partial class Application // Mouse handling
             // The coordinates are relative to the Bounds of the view that grabbed the mouse.
             // The coordinates are relative to the Bounds of the view that grabbed the mouse.
             Point frameLoc = MouseGrabView.ScreenToViewport (mouseEvent.ScreenPosition);
             Point frameLoc = MouseGrabView.ScreenToViewport (mouseEvent.ScreenPosition);
 
 
-            var viewRelativeMouseEvent = new MouseEvent
+            var viewRelativeMouseEvent = new MouseEventArgs
             {
             {
                 Position = frameLoc,
                 Position = frameLoc,
                 Flags = mouseEvent.Flags,
                 Flags = mouseEvent.Flags,
@@ -303,7 +315,6 @@ public static partial class Application // Mouse handling
 
 
     internal static readonly List<View?> _cachedViewsUnderMouse = new ();
     internal static readonly List<View?> _cachedViewsUnderMouse = new ();
 
 
-    // TODO: Refactor MouseEnter/LeaveEvents to not take MouseEvent param.
     /// <summary>
     /// <summary>
     ///     INTERNAL: Raises the MouseEnter and MouseLeave events for the views that are under the mouse.
     ///     INTERNAL: Raises the MouseEnter and MouseLeave events for the views that are under the mouse.
     /// </summary>
     /// </summary>

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

@@ -588,11 +588,11 @@ public abstract class ConsoleDriver
     public void OnKeyUp (Key a) { KeyUp?.Invoke (this, a); }
     public void OnKeyUp (Key a) { KeyUp?.Invoke (this, a); }
 
 
     /// <summary>Event fired when a mouse event occurs.</summary>
     /// <summary>Event fired when a mouse event occurs.</summary>
-    public event EventHandler<MouseEvent>? MouseEvent;
+    public event EventHandler<MouseEventArgs>? MouseEvent;
 
 
     /// <summary>Called when a mouse event occurs. Fires the <see cref="MouseEvent"/> event.</summary>
     /// <summary>Called when a mouse event occurs. Fires the <see cref="MouseEvent"/> event.</summary>
     /// <param name="a"></param>
     /// <param name="a"></param>
-    public void OnMouseEvent (MouseEvent a)
+    public void OnMouseEvent (MouseEventArgs a)
     {
     {
         // Ensure ScreenPosition is set
         // Ensure ScreenPosition is set
         a.ScreenPosition = a.Position;
         a.ScreenPosition = a.Position;

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

@@ -1004,7 +1004,7 @@ internal class CursesDriver : ConsoleDriver
 
 
         _lastMouseFlags = mouseFlag;
         _lastMouseFlags = mouseFlag;
 
 
-        var me = new MouseEvent { Flags = mouseFlag, Position = pos };
+        var me = new MouseEventArgs { Flags = mouseFlag, Position = pos };
         //Debug.WriteLine ($"CursesDriver: ({me.Position}) - {me.Flags}");
         //Debug.WriteLine ($"CursesDriver: ({me.Position}) - {me.Flags}");
 
 
         OnMouseEvent (me);
         OnMouseEvent (me);

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

@@ -1154,7 +1154,7 @@ internal class NetDriver : ConsoleDriver
 
 
                 break;
                 break;
             case EventType.Mouse:
             case EventType.Mouse:
-                MouseEvent me = ToDriverMouse (inputEvent.MouseEvent);
+                MouseEventArgs me = ToDriverMouse (inputEvent.MouseEvent);
                 //Debug.WriteLine ($"NetDriver: ({me.X},{me.Y}) - {me.Flags}");
                 //Debug.WriteLine ($"NetDriver: ({me.X},{me.Y}) - {me.Flags}");
                 OnMouseEvent (me);
                 OnMouseEvent (me);
 
 
@@ -1393,7 +1393,7 @@ internal class NetDriver : ConsoleDriver
         }
         }
     }
     }
 
 
-    private MouseEvent ToDriverMouse (NetEvents.MouseEvent me)
+    private MouseEventArgs ToDriverMouse (NetEvents.MouseEvent me)
     {
     {
        //System.Diagnostics.Debug.WriteLine ($"X: {me.Position.X}; Y: {me.Position.Y}; ButtonState: {me.ButtonState}");
        //System.Diagnostics.Debug.WriteLine ($"X: {me.Position.X}; Y: {me.Position.Y}; ButtonState: {me.ButtonState}");
 
 
@@ -1539,7 +1539,7 @@ internal class NetDriver : ConsoleDriver
             mouseFlag |= MouseFlags.ButtonAlt;
             mouseFlag |= MouseFlags.ButtonAlt;
         }
         }
 
 
-        return new MouseEvent { Position = me.Position, Flags = mouseFlag };
+        return new MouseEventArgs { Position = me.Position, Flags = mouseFlag };
     }
     }
 
 
     #endregion Mouse Handling
     #endregion Mouse Handling

+ 5 - 5
Terminal.Gui/ConsoleDrivers/WindowsDriver.cs

@@ -1483,7 +1483,7 @@ internal class WindowsDriver : ConsoleDriver
                 break;
                 break;
 
 
             case WindowsConsole.EventType.Mouse:
             case WindowsConsole.EventType.Mouse:
-                MouseEvent me = ToDriverMouse (inputEvent.MouseEvent);
+                MouseEventArgs me = ToDriverMouse (inputEvent.MouseEvent);
 
 
                 if (me is null || me.Flags == MouseFlags.None)
                 if (me is null || me.Flags == MouseFlags.None)
                 {
                 {
@@ -1827,9 +1827,9 @@ internal class WindowsDriver : ConsoleDriver
             }
             }
             await Task.Delay (delay);
             await Task.Delay (delay);
 
 
-            var me = new MouseEvent
+            var me = new MouseEventArgs
             {
             {
-                Position = _pointMove,
+                ScreenPosition = _pointMove,
                 Flags = mouseFlag
                 Flags = mouseFlag
             };
             };
 
 
@@ -1883,7 +1883,7 @@ internal class WindowsDriver : ConsoleDriver
     }
     }
 
 
     [CanBeNull]
     [CanBeNull]
-    private MouseEvent ToDriverMouse (WindowsConsole.MouseEventRecord mouseEvent)
+    private MouseEventArgs ToDriverMouse (WindowsConsole.MouseEventRecord mouseEvent)
     {
     {
         var mouseFlag = MouseFlags.AllEvents;
         var mouseFlag = MouseFlags.AllEvents;
 
 
@@ -2127,7 +2127,7 @@ internal class WindowsDriver : ConsoleDriver
         //System.Diagnostics.Debug.WriteLine (
         //System.Diagnostics.Debug.WriteLine (
         //	$"point.X:{(point is { } ? ((Point)point).X : -1)};point.Y:{(point is { } ? ((Point)point).Y : -1)}");
         //	$"point.X:{(point is { } ? ((Point)point).X : -1)};point.Y:{(point is { } ? ((Point)point).Y : -1)}");
 
 
-        return new MouseEvent
+        return new MouseEventArgs
         {
         {
             Position = new (mouseEvent.MousePosition.X, mouseEvent.MousePosition.Y),
             Position = new (mouseEvent.MousePosition.X, mouseEvent.MousePosition.Y),
             Flags = mouseFlag
             Flags = mouseFlag

+ 101 - 0
Terminal.Gui/Input/MouseEventArgs.cs

@@ -0,0 +1,101 @@
+#nullable enable
+using System.ComponentModel;
+
+namespace Terminal.Gui;
+
+/// <summary>
+///     Specifies the event arguments for <see cref="Terminal.Gui.MouseEventArgs"/>. This is a higher-level construct than
+///     the wrapped <see cref="Terminal.Gui.MouseEventArgs"/> class and is used for the events defined on
+///     <see cref="View"/> and subclasses
+///     of View (e.g. <see cref="View.MouseEnter"/> and <see cref="View.MouseClick"/>).
+/// </summary>
+public class MouseEventArgs : HandledEventArgs
+{
+    /// <summary>
+    ///     Flags indicating the state of the mouse buttons and the type of event that occurred.
+    /// </summary>
+    public MouseFlags Flags { get; set; }
+
+    /// <summary>
+    ///     The screen-relative mouse position.
+    /// </summary>
+    public Point ScreenPosition { get; set; }
+
+    /// <summary>The deepest View who's <see cref="View.Frame"/> contains <see cref="ScreenPosition"/>.</summary>
+    public View? View { get; set; }
+
+    /// <summary>
+    ///     The position of the mouse in <see cref="View"/>'s Viewport-relative coordinates. Only valid if <see cref="View"/>
+    ///     is set.
+    /// </summary>
+    public Point Position { get; set; }
+
+    /// <summary>
+    ///     Gets whether <see cref="Flags"/> contains any of the button pressed related flags.
+    /// </summary>
+    public bool IsPressed => Flags.HasFlag (MouseFlags.Button1Pressed)
+                             || Flags.HasFlag (MouseFlags.Button2Pressed)
+                             || Flags.HasFlag (MouseFlags.Button3Pressed)
+                             || Flags.HasFlag (MouseFlags.Button4Pressed);
+
+    /// <summary>
+    ///     Gets whether <see cref="Flags"/> contains any of the button released related flags.
+    /// </summary>
+    public bool IsReleased => Flags.HasFlag (MouseFlags.Button1Released)
+                              || Flags.HasFlag (MouseFlags.Button2Released)
+                              || Flags.HasFlag (MouseFlags.Button3Released)
+                              || Flags.HasFlag (MouseFlags.Button4Released);
+
+    /// <summary>
+    ///     Gets whether <see cref="Flags"/> contains any of the single-clicked related flags.
+    /// </summary>
+    public bool IsSingleClicked => Flags.HasFlag (MouseFlags.Button1Clicked)
+                                   || Flags.HasFlag (MouseFlags.Button2Clicked)
+                                   || Flags.HasFlag (MouseFlags.Button3Clicked)
+                                   || Flags.HasFlag (MouseFlags.Button4Clicked);
+
+    /// <summary>
+    ///     Gets whether <see cref="Flags"/> contains any of the double-clicked related flags.
+    /// </summary>
+    public bool IsDoubleClicked => Flags.HasFlag (MouseFlags.Button1DoubleClicked)
+                                   || Flags.HasFlag (MouseFlags.Button2DoubleClicked)
+                                   || Flags.HasFlag (MouseFlags.Button3DoubleClicked)
+                                   || Flags.HasFlag (MouseFlags.Button4DoubleClicked);
+
+    /// <summary>
+    ///     Gets whether <see cref="Flags"/> contains any of the triple-clicked related flags.
+    /// </summary>
+    public bool IsTripleClicked => Flags.HasFlag (MouseFlags.Button1TripleClicked)
+                                   || Flags.HasFlag (MouseFlags.Button2TripleClicked)
+                                   || Flags.HasFlag (MouseFlags.Button3TripleClicked)
+                                   || Flags.HasFlag (MouseFlags.Button4TripleClicked);
+
+    /// <summary>
+    ///     Gets whether <see cref="Flags"/> contains any of the mouse button clicked related flags.
+    /// </summary>
+    public bool IsSingleDoubleOrTripleClicked =>
+        Flags.HasFlag (MouseFlags.Button1Clicked)
+        || Flags.HasFlag (MouseFlags.Button2Clicked)
+        || Flags.HasFlag (MouseFlags.Button3Clicked)
+        || Flags.HasFlag (MouseFlags.Button4Clicked)
+        || Flags.HasFlag (MouseFlags.Button1DoubleClicked)
+        || Flags.HasFlag (MouseFlags.Button2DoubleClicked)
+        || Flags.HasFlag (MouseFlags.Button3DoubleClicked)
+        || Flags.HasFlag (MouseFlags.Button4DoubleClicked)
+        || Flags.HasFlag (MouseFlags.Button1TripleClicked)
+        || Flags.HasFlag (MouseFlags.Button2TripleClicked)
+        || Flags.HasFlag (MouseFlags.Button3TripleClicked)
+        || Flags.HasFlag (MouseFlags.Button4TripleClicked);
+
+    /// <summary>
+    ///     Gets whether <see cref="Flags"/> contains any of the mouse wheel related flags.
+    /// </summary>
+    public bool IsWheel => Flags.HasFlag (MouseFlags.WheeledDown)
+                           || Flags.HasFlag (MouseFlags.WheeledUp)
+                           || Flags.HasFlag (MouseFlags.WheeledLeft)
+                           || Flags.HasFlag (MouseFlags.WheeledRight);
+
+    /// <summary>Returns a <see cref="T:System.String"/> that represents the current <see cref="Terminal.Gui.MouseEventArgs"/>.</summary>
+    /// <returns>A <see cref="T:System.String"/> that represents the current <see cref="Terminal.Gui.MouseEventArgs"/>.</returns>
+    public override string ToString () { return $"({ScreenPosition}):{Flags}:{View?.Id}:{Position}"; }
+}

+ 0 - 32
Terminal.Gui/Input/MouseEventEventArgs.cs

@@ -1,32 +0,0 @@
-namespace Terminal.Gui;
-
-/// <summary>
-///     Specifies the event arguments for <see cref="Terminal.Gui.MouseEvent"/>. This is a higher-level construct than
-///     the wrapped <see cref="MouseEvent"/> class and is used for the events defined on <see cref="View"/> and subclasses
-///     of View (e.g. <see cref="View.MouseEnter"/> and <see cref="View.MouseClick"/>).
-/// </summary>
-public class MouseEventEventArgs : EventArgs
-{
-    /// <summary>Constructs.</summary>
-    /// <param name="me">The mouse event.</param>
-    public MouseEventEventArgs (MouseEvent me) { MouseEvent = me; }
-
-    /// <summary>
-    ///     Indicates if the current mouse event has already been processed and the driver should stop notifying any other
-    ///     event subscriber. It's important to set this value to true specially when updating any View's layout from inside the
-    ///     subscriber method.
-    /// </summary>
-    /// <remarks>
-    ///     This property forwards to the <see cref="MouseEvent.Handled"/> property and is provided as a convenience and
-    ///     for backwards compatibility
-    /// </remarks>
-    public bool Handled
-    {
-        get => MouseEvent.Handled;
-        set => MouseEvent.Handled = value;
-    }
-
-    // TODO: Merge MouseEvent and MouseEventEventArgs into a single class.
-    /// <summary>The <see cref="Terminal.Gui.MouseEvent"/> for the event.</summary>
-    public MouseEvent MouseEvent { get; set; }
-}

+ 2 - 49
Terminal.Gui/Input/Mouse.cs → Terminal.Gui/Input/MouseFlags.cs

@@ -1,12 +1,12 @@
 namespace Terminal.Gui;
 namespace Terminal.Gui;
 
 
-/// <summary>Mouse flags reported in <see cref="MouseEvent"/>.</summary>
+/// <summary>Mouse flags reported in <see cref="MouseEventArgs"/>.</summary>
 /// <remarks>They just happen to map to the ncurses ones.</remarks>
 /// <remarks>They just happen to map to the ncurses ones.</remarks>
 [Flags]
 [Flags]
 public enum MouseFlags
 public enum MouseFlags
 {
 {
     /// <summary>
     /// <summary>
-    ///    No mouse event. This is the default value for <see cref="MouseEvent.Flags"/> when no mouse event is being reported.
+    ///    No mouse event. This is the default value for <see cref="Terminal.Gui.MouseEventArgs.Flags"/> when no mouse event is being reported.
     /// </summary>
     /// </summary>
     None = 0,
     None = 0,
 
 
@@ -97,50 +97,3 @@ public enum MouseFlags
     /// <summary>Mask that captures all the events.</summary>
     /// <summary>Mask that captures all the events.</summary>
     AllEvents = 0x7ffffff
     AllEvents = 0x7ffffff
 }
 }
-
-// TODO: Merge MouseEvent and MouseEventEventArgs into a single class.
-
-/// <summary>
-///     Conveys the details of mouse events, such as coordinates and button state, from
-///     ConsoleDrivers up to <see cref="Application"/> and Views.
-/// </summary>
-/// <remarks>
-///     The <see cref="Application"/> class includes the <see cref="Application.MouseEvent"/> event which takes a
-///     MouseEvent argument.
-/// </remarks>
-public class MouseEvent
-{
-    /// <summary>Flags indicating the kind of mouse event that is being posted.</summary>
-    public MouseFlags Flags { get; set; }
-
-    /// <summary>The View at the location for the mouse event.</summary>
-    public View View { get; set; }
-
-    /// <summary>The position of the mouse in <see cref="Gui.View.Viewport"/>-relative coordinates.</summary>
-    public Point Position { get; set; }
-
-    /// <summary>
-    ///     The screen-relative mouse position.
-    /// </summary>
-    /// <remarks>
-    ///     <para>
-    ///         <see cref="Position"/> is <see cref="Gui.View.Viewport"/>-relative. When the mouse is grabbed by a view,
-    ///         <see cref="ScreenPosition"/> provides the mouse position screen-relative coordinates, enabling the grabbed view to know how much the
-    ///         mouse has moved.
-    ///     </para>
-    ///     <para>
-    ///         Calculated and processed in <see cref="Application.OnMouseEvent(MouseEvent)"/>.
-    ///     </para>
-    /// </remarks>
-    public Point ScreenPosition { get; set; }
-
-    /// <summary>
-    ///     Indicates if the current mouse event has been processed. Set this value to <see langword="true"/> to indicate the mouse
-    ///     event was handled.
-    /// </summary>
-    public bool Handled { get; set; }
-
-    /// <summary>Returns a <see cref="T:System.String"/> that represents the current <see cref="MouseEvent"/>.</summary>
-    /// <returns>A <see cref="T:System.String"/> that represents the current <see cref="MouseEvent"/>.</returns>
-    public override string ToString () { return $"({Position}):{Flags}"; }
-}

+ 1 - 1
Terminal.Gui/Text/Autocomplete/AppendAutocomplete.cs

@@ -59,7 +59,7 @@ public class AppendAutocomplete : AutocompleteBase
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    public override bool OnMouseEvent (MouseEvent me, bool fromHost = false) { return false; }
+    public override bool OnMouseEvent (MouseEventArgs me, bool fromHost = false) { return false; }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
     public override bool ProcessKey (Key a)
     public override bool ProcessKey (Key a)

+ 1 - 1
Terminal.Gui/Text/Autocomplete/AutocompleteBase.cs

@@ -49,7 +49,7 @@ public abstract class AutocompleteBase : IAutocomplete
     public virtual AutocompleteContext Context { get; set; }
     public virtual AutocompleteContext Context { get; set; }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    public abstract bool OnMouseEvent (MouseEvent me, bool fromHost = false);
+    public abstract bool OnMouseEvent (MouseEventArgs me, bool fromHost = false);
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
     public abstract bool ProcessKey (Key a);
     public abstract bool ProcessKey (Key a);

+ 1 - 1
Terminal.Gui/Text/Autocomplete/IAutocomplete.cs

@@ -45,7 +45,7 @@ public interface IAutocomplete
     /// <param name="me">The mouse event.</param>
     /// <param name="me">The mouse event.</param>
     /// <param name="fromHost">If was called from the popup or from the host.</param>
     /// <param name="fromHost">If was called from the popup or from the host.</param>
     /// <returns><c>true</c>if the mouse can be handled <c>false</c>otherwise.</returns>
     /// <returns><c>true</c>if the mouse can be handled <c>false</c>otherwise.</returns>
-    bool OnMouseEvent (MouseEvent me, bool fromHost = false);
+    bool OnMouseEvent (MouseEventArgs me, bool fromHost = false);
 
 
     /// <summary>Gets or sets where the popup will be displayed.</summary>
     /// <summary>Gets or sets where the popup will be displayed.</summary>
     bool PopupInsideContainer { get; set; }
     bool PopupInsideContainer { get; set; }

+ 1 - 1
Terminal.Gui/Text/Autocomplete/PopupAutocomplete.PopUp.cs

@@ -25,6 +25,6 @@ public abstract partial class PopupAutocomplete
             _autoComplete.RenderOverlay (_autoComplete.LastPopupPos.Value);
             _autoComplete.RenderOverlay (_autoComplete.LastPopupPos.Value);
         }
         }
 
 
-        protected internal override bool OnMouseEvent (MouseEvent mouseEvent) { return _autoComplete.OnMouseEvent (mouseEvent); }
+        protected override bool OnMouseEvent (MouseEventArgs mouseEvent) { return _autoComplete.OnMouseEvent (mouseEvent); }
     }
     }
 }
 }

+ 2 - 2
Terminal.Gui/Text/Autocomplete/PopupAutocomplete.cs

@@ -105,7 +105,7 @@ public abstract partial class PopupAutocomplete : AutocompleteBase
     /// <param name="me">The mouse event.</param>
     /// <param name="me">The mouse event.</param>
     /// <param name="fromHost">If was called from the popup or from the host.</param>
     /// <param name="fromHost">If was called from the popup or from the host.</param>
     /// <returns><c>true</c>if the mouse can be handled <c>false</c>otherwise.</returns>
     /// <returns><c>true</c>if the mouse can be handled <c>false</c>otherwise.</returns>
-    public override bool OnMouseEvent (MouseEvent me, bool fromHost = false)
+    public override bool OnMouseEvent (MouseEventArgs me, bool fromHost = false)
     {
     {
         if (fromHost)
         if (fromHost)
         {
         {
@@ -488,7 +488,7 @@ public abstract partial class PopupAutocomplete : AutocompleteBase
 
 
     /// <summary>Render the current selection in the Autocomplete context menu by the mouse reporting.</summary>
     /// <summary>Render the current selection in the Autocomplete context menu by the mouse reporting.</summary>
     /// <param name="me"></param>
     /// <param name="me"></param>
-    protected void RenderSelectedIdxByMouse (MouseEvent me)
+    protected void RenderSelectedIdxByMouse (MouseEventArgs me)
     {
     {
         if (SelectedIdx != me.Position.Y - ScrollOffset)
         if (SelectedIdx != me.Position.Y - ScrollOffset)
         {
         {

+ 2 - 7
Terminal.Gui/View/Adornment/Border.cs

@@ -262,13 +262,8 @@ public class Border : Adornment
     private Point _startGrabPoint;
     private Point _startGrabPoint;
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent mouseEvent)
+    protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
     {
     {
-        if (base.OnMouseEvent (mouseEvent))
-        {
-            return true;
-        }
-
         // BUGBUG: See https://github.com/gui-cs/Terminal.Gui/issues/3312
         // BUGBUG: See https://github.com/gui-cs/Terminal.Gui/issues/3312
         if (!_dragPosition.HasValue && mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed)
         if (!_dragPosition.HasValue && mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed)
                                     // HACK: Prevents Window from being draggable if it's Top
                                     // HACK: Prevents Window from being draggable if it's Top
@@ -1370,7 +1365,7 @@ public class Border : Adornment
         KeyBindings.Add (Key.Tab.WithShift, KeyBindingScope.HotKey, Command.BackTab);
         KeyBindings.Add (Key.Tab.WithShift, KeyBindingScope.HotKey, Command.BackTab);
     }
     }
 
 
-    private void ApplicationOnMouseEvent (object? sender, MouseEvent e)
+    private void ApplicationOnMouseEvent (object? sender, MouseEventArgs e)
     {
     {
         if (e.Flags != MouseFlags.Button1Clicked)
         if (e.Flags != MouseFlags.Button1Clicked)
         {
         {

+ 1 - 1
Terminal.Gui/View/Adornment/Padding.cs

@@ -50,7 +50,7 @@ public class Padding : Adornment
     /// </remarks>
     /// </remarks>
     /// <param name="mouseEvent"></param>
     /// <param name="mouseEvent"></param>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
-    protected internal override bool OnMouseEvent (MouseEvent mouseEvent)
+    protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
     {
     {
         if (Parent is null)
         if (Parent is null)
         {
         {

+ 96 - 85
Terminal.Gui/View/View.Mouse.cs

@@ -11,7 +11,7 @@ public partial class View // Mouse APIs
     private ColorScheme? _savedNonHoverColorScheme;
     private ColorScheme? _savedNonHoverColorScheme;
 
 
     /// <summary>
     /// <summary>
-    ///     INTERNAL Called by <see cref="Application.OnMouseEvent"/> when the mouse moves over the View's <see cref="Frame"/>.
+    ///     INTERNAL Called by <see cref="Application.RaiseMouseEvent"/> when the mouse moves over the View's <see cref="Frame"/>.
     ///     <see cref="MouseLeave"/> will
     ///     <see cref="MouseLeave"/> will
     ///     be raised when the mouse is no longer over the <see cref="Frame"/>. If another View occludes this View, the
     ///     be raised when the mouse is no longer over the <see cref="Frame"/>. If another View occludes this View, the
     ///     that View will also receive MouseEnter/Leave events.
     ///     that View will also receive MouseEnter/Leave events.
@@ -126,7 +126,7 @@ public partial class View // Mouse APIs
     public event EventHandler<CancelEventArgs>? MouseEnter;
     public event EventHandler<CancelEventArgs>? MouseEnter;
 
 
     /// <summary>
     /// <summary>
-    ///     INTERNAL Called by <see cref="Application.OnMouseEvent"/> when the mouse leaves <see cref="Frame"/>, or is occluded
+    ///     INTERNAL Called by <see cref="Application.RaiseMouseEvent"/> when the mouse leaves <see cref="Frame"/>, or is occluded
     ///     by another non-SubView.
     ///     by another non-SubView.
     /// </summary>
     /// </summary>
     /// <remarks>
     /// <remarks>
@@ -196,16 +196,15 @@ public partial class View // Mouse APIs
 
 
     #region Low Level Mouse Events
     #region Low Level Mouse Events
 
 
-    /// <summary>Event fired when a mouse event occurs.</summary>
-    /// <remarks>
-    ///     <para>
-    ///         The coordinates are relative to <see cref="View.Viewport"/>.
-    ///     </para>
-    /// </remarks>
-    public event EventHandler<MouseEventEventArgs>? MouseEvent;
+    /// <summary>Gets or sets whether the <see cref="View"/> wants continuous button pressed events.</summary>
+    public virtual bool WantContinuousButtonPressed { get; set; }
+
+    /// <summary>Gets or sets whether the <see cref="View"/> wants mouse position reports.</summary>
+    /// <value><see langword="true"/> if mouse position reports are wanted; otherwise, <see langword="false"/>.</value>
+    public bool WantMousePositionReports { get; set; }
 
 
     /// <summary>
     /// <summary>
-    ///     Processes a <see cref="MouseEvent"/>. This method is called by <see cref="Application.OnMouseEvent"/> when a mouse
+    ///     Processes a new <see cref="MouseEvent"/>. This method is called by <see cref="Application.RaiseMouseEvent"/> when a mouse
     ///     event occurs.
     ///     event occurs.
     /// </summary>
     /// </summary>
     /// <remarks>
     /// <remarks>
@@ -213,20 +212,20 @@ public partial class View // Mouse APIs
     ///         A view must be both enabled and visible to receive mouse events.
     ///         A view must be both enabled and visible to receive mouse events.
     ///     </para>
     ///     </para>
     ///     <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.
+    ///         This method raises <see cref="RaiseMouseEvent"/>/<see cref="MouseEvent"/>; if not handled, and one of the
+    ///         mouse buttons was clicked, the <see cref="RaiseMouseClickEvent"/>/<see cref="MouseClick"/> event will be raised
     ///     </para>
     ///     </para>
     ///     <para>
     ///     <para>
     ///         See <see cref="SetPressedHighlight"/> for more information.
     ///         See <see cref="SetPressedHighlight"/> for more information.
     ///     </para>
     ///     </para>
     ///     <para>
     ///     <para>
-    ///         If <see cref="WantContinuousButtonPressed"/> is <see langword="true"/>, the <see cref="OnMouseClick"/> event
-    ///         will be invoked repeatedly while the button is pressed.
+    ///         If <see cref="WantContinuousButtonPressed"/> is <see langword="true"/>, the <see cref="RaiseMouseEvent"/>/<see cref="MouseEvent"/> event
+    ///         will be raised on any new mouse event where <see cref="Terminal.Gui.MouseEventArgs.Flags"/> indicates a button is pressed.
     ///     </para>
     ///     </para>
     /// </remarks>
     /// </remarks>
     /// <param name="mouseEvent"></param>
     /// <param name="mouseEvent"></param>
     /// <returns><see langword="true"/> if the event was handled, <see langword="false"/> otherwise.</returns>
     /// <returns><see langword="true"/> if the event was handled, <see langword="false"/> otherwise.</returns>
-    public bool? NewMouseEvent (MouseEvent mouseEvent)
+    public bool? NewMouseEvent (MouseEventArgs mouseEvent)
     {
     {
         // Pre-conditions
         // Pre-conditions
         if (!Enabled)
         if (!Enabled)
@@ -246,17 +245,13 @@ public partial class View // Mouse APIs
         }
         }
 
 
         // Cancellable event
         // Cancellable event
-        if (OnMouseEvent (mouseEvent))
+        if (RaiseMouseEvent (mouseEvent) || mouseEvent.Handled)
         {
         {
-            // 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;
+            return true;
         }
         }
 
 
-        // BUGBUG: MouseEvent should be fired from here. Fix this in https://github.com/gui-cs/Terminal.Gui/issues/3029
-
         // Post-Conditions
         // Post-Conditions
-        if (HighlightStyle != HighlightStyle.None || (WantContinuousButtonPressed && WantMousePositionReports))
+        if (HighlightStyle != HighlightStyle.None || WantContinuousButtonPressed)
         {
         {
             if (WhenGrabbedHandlePressed (mouseEvent))
             if (WhenGrabbedHandlePressed (mouseEvent))
             {
             {
@@ -274,35 +269,33 @@ public partial class View // Mouse APIs
             }
             }
         }
         }
 
 
-        if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button2Clicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button4Clicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button2DoubleClicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button3DoubleClicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button4DoubleClicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button1TripleClicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button2TripleClicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button3TripleClicked)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button4TripleClicked)
-           )
+        if (mouseEvent.IsSingleDoubleOrTripleClicked)
         {
         {
             // If it's a click, and we didn't handle it, then we need to generate a click event
             // If it's a click, and we didn't handle it, then we need to generate a click event
             // We get here if the view did not handle the mouse event via OnMouseEvent/MouseEvent and
             // We get here if the view did not handle the mouse event via OnMouseEvent/MouseEvent and
             // it did not handle the press/release/clicked events via HandlePress/HandleRelease/HandleClicked
             // it did not handle the press/release/clicked events via HandlePress/HandleRelease/HandleClicked
-            return OnMouseClick (new (mouseEvent));
+            return RaiseMouseClickEvent (mouseEvent);
         }
         }
 
 
         return false;
         return false;
     }
     }
 
 
-    /// <summary>Gets or sets whether the <see cref="View"/> wants continuous button pressed events.</summary>
-    public virtual bool WantContinuousButtonPressed { get; set; }
+    /// <summary>
+    ///     Raises the <see cref="RaiseMouseEvent"/>/<see cref="MouseEvent"/> event.
+    /// </summary>
+    /// <param name="mouseEvent"></param>
+    /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
+    public bool RaiseMouseEvent (MouseEventArgs mouseEvent)
+    {
+        if (OnMouseEvent (mouseEvent) || mouseEvent.Handled == true)
+        {
+            return true;
+        }
 
 
-    /// <summary>Gets or sets whether the <see cref="View"/> wants mouse position reports.</summary>
-    /// <value><see langword="true"/> if mouse position reports are wanted; otherwise, <see langword="false"/>.</value>
-    public virtual bool WantMousePositionReports { get; set; }
+        MouseEvent?.Invoke (this, mouseEvent);
+
+        return mouseEvent.Handled;
+    }
 
 
     /// <summary>Called when a mouse event occurs within the view's <see cref="Viewport"/>.</summary>
     /// <summary>Called when a mouse event occurs within the view's <see cref="Viewport"/>.</summary>
     /// <remarks>
     /// <remarks>
@@ -312,44 +305,36 @@ public partial class View // Mouse APIs
     /// </remarks>
     /// </remarks>
     /// <param name="mouseEvent"></param>
     /// <param name="mouseEvent"></param>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
-    protected internal virtual bool OnMouseEvent (MouseEvent mouseEvent)
+    protected virtual bool OnMouseEvent (MouseEventArgs mouseEvent)
     {
     {
-        var args = new MouseEventEventArgs (mouseEvent);
-
-        MouseEvent?.Invoke (this, args);
-
-        return args.Handled;
+        return false;
     }
     }
 
 
-    #endregion Low Level Mouse Events
-
-    #region Mouse Click Events
-
-    /// <summary>Event fired when a mouse click occurs.</summary>
-    /// 
+    /// <summary>Raised when a mouse event occurs.</summary>
     /// <remarks>
     /// <remarks>
     ///     <para>
     ///     <para>
-    ///         Fired when the mouse is either clicked or double-clicked. Check
-    ///         <see cref="MouseEvent.Flags"/> to see which button was clicked.
-    ///     </para>
-    ///     <para>
     ///         The coordinates are relative to <see cref="View.Viewport"/>.
     ///         The coordinates are relative to <see cref="View.Viewport"/>.
     ///     </para>
     ///     </para>
     /// </remarks>
     /// </remarks>
-    public event EventHandler<MouseEventEventArgs>? MouseClick;
+    public event EventHandler<MouseEventArgs>? MouseEvent;
+
+    #endregion Low Level Mouse Events
 
 
-    /// <summary>Invokes the MouseClick event.</summary>
+    #region Mouse Click Events
+
+    /// <summary>Raises the <see cref="OnMouseClick"/>/<see cref="MouseClick"/> event.</summary>
     /// <remarks>
     /// <remarks>
     ///     <para>
     ///     <para>
-    ///         Called when the mouse is either clicked or double-clicked. Check
-    ///         <see cref="MouseEvent.Flags"/> to see which button was clicked.
+    ///         Called when the mouse is either clicked or double-clicked.
+    ///     </para>
+    ///     <para>
+    ///         If <see cref="WantContinuousButtonPressed"/> is <see langword="true"/>, will be invoked on every mouse event where
+    ///         the mouse button is pressed.
     ///     </para>
     ///     </para>
     /// </remarks>
     /// </remarks>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
-    protected bool OnMouseClick (MouseEventEventArgs args)
+    protected bool RaiseMouseClickEvent (MouseEventArgs args)
     {
     {
-        // BUGBUG: This should be named NewMouseClickEvent. Fix this in https://github.com/gui-cs/Terminal.Gui/issues/3029
-
         // Pre-conditions
         // Pre-conditions
         if (!Enabled)
         if (!Enabled)
         {
         {
@@ -359,7 +344,10 @@ public partial class View // Mouse APIs
 
 
         // Cancellable event
         // Cancellable event
 
 
-        // BUGBUG: There should be a call to a protected virtual OnMouseClick here. Fix this in https://github.com/gui-cs/Terminal.Gui/issues/3029
+        if (OnMouseClick (args) || args.Handled)
+        {
+            return args.Handled;
+        }
 
 
         MouseClick?.Invoke (this, args);
         MouseClick?.Invoke (this, args);
 
 
@@ -372,11 +360,39 @@ public partial class View // Mouse APIs
 
 
         // Always invoke Select command on MouseClick
         // Always invoke Select command on MouseClick
         // By default, this will raise Selecting/OnSelecting - Subclasses can override this via AddCommand (Command.Select ...).
         // By default, this will raise Selecting/OnSelecting - Subclasses can override this via AddCommand (Command.Select ...).
-        args.Handled = InvokeCommand (Command.Select, ctx: new (Command.Select, key: null, data: args.MouseEvent)) == true;
+        args.Handled = InvokeCommand (Command.Select, ctx: new (Command.Select, key: null, data: args)) == true;
 
 
         return args.Handled;
         return args.Handled;
     }
     }
 
 
+    /// <summary>
+    ///     Called when a mouse click occurs. Check <see cref="MouseEventArgs.Flags"/> to see which button was clicked.
+    /// </summary>
+    /// <remarks>
+    ///     <para>
+    ///         Called when the mouse is either clicked or double-clicked.
+    ///     </para>
+    ///     <para>
+    ///         If <see cref="WantContinuousButtonPressed"/> is <see langword="true"/>, will be called on every mouse event where
+    ///         the mouse button is pressed.
+    ///     </para>
+    /// </remarks>
+    /// <param name="args"></param>
+    /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
+    protected virtual bool OnMouseClick (MouseEventArgs args) { return false; }
+
+    /// <summary>Raised when a mouse click occurs.</summary>
+    /// <remarks>
+    ///     <para>
+    ///         Raised when the mouse is either clicked or double-clicked.
+    ///     </para>
+    ///     <para>
+    ///         If <see cref="WantContinuousButtonPressed"/> is <see langword="true"/>, will be raised on every mouse event where
+    ///         the mouse button is pressed.
+    ///     </para>
+    /// </remarks>
+    public event EventHandler<MouseEventArgs>? MouseClick;
+
     /// <summary>
     /// <summary>
     ///     INTERNAL For cases where the view is grabbed and the mouse is clicked, this method handles the click event (typically
     ///     INTERNAL For cases where the view is grabbed and the mouse is clicked, this method handles the click event (typically
     ///     when <see cref="WantContinuousButtonPressed"/> or <see cref="HighlightStyle"/> are set).
     ///     when <see cref="WantContinuousButtonPressed"/> or <see cref="HighlightStyle"/> are set).
@@ -386,13 +402,11 @@ public partial class View // Mouse APIs
     /// </remarks>
     /// </remarks>
     /// <param name="mouseEvent"></param>
     /// <param name="mouseEvent"></param>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
-    internal bool WhenGrabbedHandleClicked (MouseEvent mouseEvent)
+    internal bool WhenGrabbedHandleClicked (MouseEventArgs 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)))
+        mouseEvent.Handled = false;
+
+        if (Application.MouseGrabView == this && mouseEvent.IsSingleClicked)
         {
         {
             // We're grabbed. Clicked event comes after the last Release. This is our signal to ungrab
             // We're grabbed. Clicked event comes after the last Release. This is our signal to ungrab
             Application.UngrabMouse ();
             Application.UngrabMouse ();
@@ -405,7 +419,7 @@ public partial class View // Mouse APIs
             // If mouse is still in bounds, generate a click
             // If mouse is still in bounds, generate a click
             if (!WantMousePositionReports && Viewport.Contains (mouseEvent.Position))
             if (!WantMousePositionReports && Viewport.Contains (mouseEvent.Position))
             {
             {
-                return OnMouseClick (new (mouseEvent));
+                return RaiseMouseClickEvent (mouseEvent);
             }
             }
 
 
             return mouseEvent.Handled = true;
             return mouseEvent.Handled = true;
@@ -423,12 +437,11 @@ public partial class View // Mouse APIs
     /// </remarks>
     /// </remarks>
     /// <param name="mouseEvent"></param>
     /// <param name="mouseEvent"></param>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
-    internal bool WhenGrabbedHandleReleased (MouseEvent mouseEvent)
+    internal bool WhenGrabbedHandleReleased (MouseEventArgs mouseEvent)
     {
     {
-        if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Released)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button2Released)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button3Released)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button4Released))
+        mouseEvent.Handled = false;
+
+        if (mouseEvent.IsReleased)
         {
         {
             if (Application.MouseGrabView == this)
             if (Application.MouseGrabView == this)
             {
             {
@@ -452,12 +465,11 @@ public partial class View // Mouse APIs
     /// </remarks>
     /// </remarks>
     /// <param name="mouseEvent"></param>
     /// <param name="mouseEvent"></param>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
     /// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
-    private bool WhenGrabbedHandlePressed (MouseEvent mouseEvent)
+    private bool WhenGrabbedHandlePressed (MouseEventArgs mouseEvent)
     {
     {
-        if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button2Pressed)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button3Pressed)
-            || mouseEvent.Flags.HasFlag (MouseFlags.Button4Pressed))
+        mouseEvent.Handled = false;
+
+        if (mouseEvent.IsPressed)
         {
         {
             // The first time we get pressed event, grab the mouse and set focus
             // The first time we get pressed event, grab the mouse and set focus
             if (Application.MouseGrabView != this)
             if (Application.MouseGrabView != this)
@@ -493,8 +505,7 @@ public partial class View // Mouse APIs
 
 
             if (WantContinuousButtonPressed && Application.MouseGrabView == this)
             if (WantContinuousButtonPressed && Application.MouseGrabView == this)
             {
             {
-                // If this is not the first pressed event, generate a click
-                return OnMouseClick (new (mouseEvent));
+                return RaiseMouseClickEvent (mouseEvent);
             }
             }
 
 
             return mouseEvent.Handled = true;
             return mouseEvent.Handled = true;

+ 5 - 5
Terminal.Gui/Views/Bar.cs

@@ -45,27 +45,27 @@ public class Bar : View, IOrientation, IDesignable
         }
         }
     }
     }
 
 
-    private void OnMouseEvent (object? sender, MouseEventEventArgs e)
+    private void OnMouseEvent (object? sender, MouseEventArgs e)
     {
     {
         NavigationDirection direction = NavigationDirection.Backward;
         NavigationDirection direction = NavigationDirection.Backward;
 
 
-        if (e.MouseEvent.Flags == MouseFlags.WheeledDown)
+        if (e.Flags == MouseFlags.WheeledDown)
         {
         {
             e.Handled = true;
             e.Handled = true;
         }
         }
 
 
-        if (e.MouseEvent.Flags == MouseFlags.WheeledUp)
+        if (e.Flags == MouseFlags.WheeledUp)
         {
         {
             direction = NavigationDirection.Forward;
             direction = NavigationDirection.Forward;
             e.Handled = true;
             e.Handled = true;
         }
         }
 
 
-        if (e.MouseEvent.Flags == MouseFlags.WheeledRight)
+        if (e.Flags == MouseFlags.WheeledRight)
         {
         {
             e.Handled = true;
             e.Handled = true;
         }
         }
 
 
-        if (e.MouseEvent.Flags == MouseFlags.WheeledLeft)
+        if (e.Flags == MouseFlags.WheeledLeft)
         {
         {
             direction = NavigationDirection.Forward;
             direction = NavigationDirection.Forward;
             e.Handled = true;
             e.Handled = true;

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

@@ -125,7 +125,7 @@ public class Button : View, IDesignable
         }
         }
     }
     }
 
 
-    private void Button_MouseClick (object sender, MouseEventEventArgs e)
+    private void Button_MouseClick (object sender, MouseEventArgs e)
     {
     {
         if (e.Handled)
         if (e.Handled)
         {
         {

+ 2 - 3
Terminal.Gui/Views/ColorBar.cs

@@ -110,7 +110,7 @@ internal abstract class ColorBar : View, IColorBar
     public event EventHandler<EventArgs<int>>? ValueChanged;
     public event EventHandler<EventArgs<int>>? ValueChanged;
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent mouseEvent)
+    protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
     {
     {
         if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed))
         if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed))
         {
         {
@@ -123,10 +123,9 @@ internal abstract class ColorBar : View, IColorBar
             mouseEvent.Handled = true;
             mouseEvent.Handled = true;
             SetFocus ();
             SetFocus ();
 
 
-            return true;
         }
         }
 
 
-        return base.OnMouseEvent (mouseEvent);
+        return mouseEvent.Handled;
     }
     }
 
 
     /// <summary>
     /// <summary>

+ 2 - 2
Terminal.Gui/Views/ColorPicker.16.cs

@@ -181,11 +181,11 @@ public class ColorPicker16 : View
 
 
     // TODO: Decouple Cursor from SelectedColor so that mouse press-and-hold can show the color under the cursor.
     // TODO: Decouple Cursor from SelectedColor so that mouse press-and-hold can show the color under the cursor.
 
 
-    private void ColorPicker_MouseClick (object sender, MouseEventEventArgs me)
+    private void ColorPicker_MouseClick (object sender, MouseEventArgs me)
     {
     {
         // if (CanFocus)
         // if (CanFocus)
         {
         {
-            Cursor = new (me.MouseEvent.Position.X / _boxWidth, me.MouseEvent.Position.Y / _boxHeight);
+            Cursor = new (me.Position.X / _boxWidth, me.Position.Y / _boxHeight);
             SetFocus ();
             SetFocus ();
             me.Handled = true;
             me.Handled = true;
         }
         }

+ 6 - 5
Terminal.Gui/Views/ComboBox.cs

@@ -253,7 +253,7 @@ public class ComboBox : View, IDesignable
     public event EventHandler Expanded;
     public event EventHandler Expanded;
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent me)
+    protected override bool OnMouseEvent (MouseEventArgs me)
     {
     {
         if (me.Position.X == Viewport.Right - 1
         if (me.Position.X == Viewport.Right - 1
             && me.Position.Y == Viewport.Top
             && me.Position.Y == Viewport.Top
@@ -836,14 +836,15 @@ public class ComboBox : View, IDesignable
             set => _hideDropdownListOnClick = WantContinuousButtonPressed = value;
             set => _hideDropdownListOnClick = WantContinuousButtonPressed = value;
         }
         }
 
 
-        // BUGBUG: OnMouseEvent is internal!
-        protected internal override bool OnMouseEvent (MouseEvent me)
+        protected override bool OnMouseEvent (MouseEventArgs me)
         {
         {
-            var res = false;
             bool isMousePositionValid = IsMousePositionValid (me);
             bool isMousePositionValid = IsMousePositionValid (me);
 
 
+            var res = false;
+
             if (isMousePositionValid)
             if (isMousePositionValid)
             {
             {
+                // We're derived from ListView and it overrides OnMouseEvent, so we need to call it
                 res = base.OnMouseEvent (me);
                 res = base.OnMouseEvent (me);
             }
             }
 
 
@@ -984,7 +985,7 @@ public class ComboBox : View, IDesignable
             return res;
             return res;
         }
         }
 
 
-        private bool IsMousePositionValid (MouseEvent me)
+        private bool IsMousePositionValid (MouseEventArgs me)
         {
         {
             if (me.Position.X >= 0 && me.Position.X < Frame.Width && me.Position.Y >= 0 && me.Position.Y < Frame.Height)
             if (me.Position.X >= 0 && me.Position.X < Frame.Width && me.Position.Y >= 0 && me.Position.Y < Frame.Height)
             {
             {

+ 8 - 5
Terminal.Gui/Views/DateField.cs

@@ -114,16 +114,19 @@ public class DateField : TextField
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent  (MouseEvent ev)
+    protected override bool OnMouseEvent  (MouseEventArgs ev)
     {
     {
-        bool result = base.OnMouseEvent (ev);
+        if (base.OnMouseEvent (ev) || ev.Handled)
+        {
+            return true;
+        }
 
 
-        if (result && SelectedLength == 0 && ev.Flags.HasFlag (MouseFlags.Button1Pressed))
+        if (SelectedLength == 0 && ev.Flags.HasFlag (MouseFlags.Button1Pressed))
         {
         {
             AdjCursorPosition (ev.Position.X);
             AdjCursorPosition (ev.Position.X);
         }
         }
 
 
-        return result;
+        return ev.Handled;
     }
     }
 
 
     /// <summary>Event firing method for the <see cref="DateChanged"/> event.</summary>
     /// <summary>Event firing method for the <see cref="DateChanged"/> event.</summary>
@@ -169,7 +172,7 @@ public class DateField : TextField
             CursorPosition = newPoint;
             CursorPosition = newPoint;
         }
         }
 
 
-        while (Text [CursorPosition].ToString () == _separator)
+        while (CursorPosition < Text.GetColumns () - 1 && Text [CursorPosition].ToString () == _separator)
         {
         {
             if (increment)
             if (increment)
             {
             {

+ 9 - 9
Terminal.Gui/Views/FileDialog.cs

@@ -1007,18 +1007,18 @@ public class FileDialog : Dialog
         }
         }
     }
     }
 
 
-    private void OnTableViewMouseClick (object sender, MouseEventEventArgs e)
+    private void OnTableViewMouseClick (object sender, MouseEventArgs e)
     {
     {
-        Point? clickedCell = _tableView.ScreenToCell (e.MouseEvent.Position.X, e.MouseEvent.Position.Y, out int? clickedCol);
+        Point? clickedCell = _tableView.ScreenToCell (e.Position.X, e.Position.Y, out int? clickedCol);
 
 
         if (clickedCol is { })
         if (clickedCol is { })
         {
         {
-            if (e.MouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked))
+            if (e.Flags.HasFlag (MouseFlags.Button1Clicked))
             {
             {
                 // left click in a header
                 // left click in a header
                 SortColumn (clickedCol.Value);
                 SortColumn (clickedCol.Value);
             }
             }
-            else if (e.MouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked))
+            else if (e.Flags.HasFlag (MouseFlags.Button3Clicked))
             {
             {
                 // right click in a header
                 // right click in a header
                 ShowHeaderContextMenu (clickedCol.Value, e);
                 ShowHeaderContextMenu (clickedCol.Value, e);
@@ -1026,7 +1026,7 @@ public class FileDialog : Dialog
         }
         }
         else
         else
         {
         {
-            if (clickedCell is { } && e.MouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked))
+            if (clickedCell is { } && e.Flags.HasFlag (MouseFlags.Button3Clicked))
             {
             {
                 // right click in rest of table
                 // right click in rest of table
                 ShowCellContextMenu (clickedCell, e);
                 ShowCellContextMenu (clickedCell, e);
@@ -1198,7 +1198,7 @@ public class FileDialog : Dialog
 
 
     private FileSystemInfoStats RowToStats (int rowIndex) { return State?.Children [rowIndex]; }
     private FileSystemInfoStats RowToStats (int rowIndex) { return State?.Children [rowIndex]; }
 
 
-    private void ShowCellContextMenu (Point? clickedCell, MouseEventEventArgs e)
+    private void ShowCellContextMenu (Point? clickedCell, MouseEventArgs e)
     {
     {
         if (clickedCell is null)
         if (clickedCell is null)
         {
         {
@@ -1207,7 +1207,7 @@ public class FileDialog : Dialog
 
 
         var contextMenu = new ContextMenu
         var contextMenu = new ContextMenu
         {
         {
-            Position = new Point (e.MouseEvent.Position.X + 1, e.MouseEvent.Position.Y + 1)
+            Position = new Point (e.Position.X + 1, e.Position.Y + 1)
         };
         };
 
 
         var menuItems = new MenuBarItem (
         var menuItems = new MenuBarItem (
@@ -1222,13 +1222,13 @@ public class FileDialog : Dialog
         contextMenu.Show (menuItems);
         contextMenu.Show (menuItems);
     }
     }
 
 
-    private void ShowHeaderContextMenu (int clickedCol, MouseEventEventArgs e)
+    private void ShowHeaderContextMenu (int clickedCol, MouseEventArgs e)
     {
     {
         string sort = GetProposedNewSortOrder (clickedCol, out bool isAsc);
         string sort = GetProposedNewSortOrder (clickedCol, out bool isAsc);
 
 
         var contextMenu = new ContextMenu
         var contextMenu = new ContextMenu
         {
         {
-            Position = new Point (e.MouseEvent.Position.X + 1, e.MouseEvent.Position.Y + 1)
+            Position = new Point (e.Position.X + 1, e.Position.Y + 1)
         };
         };
 
 
         var menuItems = new MenuBarItem (
         var menuItems = new MenuBarItem (

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

@@ -22,7 +22,7 @@ public class FrameView : View
         MouseClick += FrameView_MouseClick;
         MouseClick += FrameView_MouseClick;
     }
     }
 
 
-    private void FrameView_MouseClick (object sender, MouseEventEventArgs e)
+    private void FrameView_MouseClick (object sender, MouseEventArgs e)
     {
     {
         // base sets focus on HotKey
         // base sets focus on HotKey
         e.Handled = InvokeCommand (Command.HotKey, ctx: new (Command.HotKey, key: null, data: this)) == true;
         e.Handled = InvokeCommand (Command.HotKey, ctx: new (Command.HotKey, key: null, data: this)) == true;

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

@@ -250,7 +250,7 @@ public class HexView : View, IDesignable
     public event EventHandler<HexViewEditEventArgs> Edited;
     public event EventHandler<HexViewEditEventArgs> Edited;
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent me)
+    protected override bool OnMouseEvent (MouseEventArgs me)
     {
     {
         if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)
         if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)
             && !me.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
             && !me.Flags.HasFlag (MouseFlags.Button1DoubleClicked)

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

@@ -32,7 +32,7 @@ public class Label : View, IDesignable
     }
     }
 
 
     // TODO: base raises Select, but we want to raise HotKey. This can be simplified?
     // TODO: base raises Select, but we want to raise HotKey. This can be simplified?
-    private void Label_MouseClick (object sender, MouseEventEventArgs e)
+    private void Label_MouseClick (object sender, MouseEventArgs e)
     {
     {
         if (!CanFocus)
         if (!CanFocus)
         {
         {

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

@@ -472,7 +472,7 @@ public class ListView : View, IDesignable
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent me)
+    protected override bool OnMouseEvent (MouseEventArgs me)
     {
     {
         if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)
         if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)
             && !me.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
             && !me.Flags.HasFlag (MouseFlags.Button1DoubleClicked)

+ 5 - 3
Terminal.Gui/Views/Menu/Menu.cs

@@ -1,5 +1,7 @@
 #nullable enable
 #nullable enable
 
 
+using static System.Formats.Asn1.AsnWriter;
+
 namespace Terminal.Gui;
 namespace Terminal.Gui;
 
 
 /// <summary>
 /// <summary>
@@ -335,7 +337,7 @@ internal sealed class Menu : View
         }
         }
     }
     }
 
 
-    private void Application_RootMouseEvent (object? sender, MouseEvent a)
+    private void Application_RootMouseEvent (object? sender, MouseEventArgs a)
     {
     {
         if (a.View is { } and (MenuBar or not Menu))
         if (a.View is { } and (MenuBar or not Menu))
         {
         {
@@ -351,7 +353,7 @@ internal sealed class Menu : View
 
 
         Point boundsPoint = view.ScreenToViewport (new (a.Position.X, a.Position.Y));
         Point boundsPoint = view.ScreenToViewport (new (a.Position.X, a.Position.Y));
 
 
-        var me = new MouseEvent
+        var me = new MouseEventArgs
         {
         {
             Position = boundsPoint,
             Position = boundsPoint,
             Flags = a.Flags,
             Flags = a.Flags,
@@ -806,7 +808,7 @@ internal sealed class Menu : View
         _host.SetNeedsDisplay ();
         _host.SetNeedsDisplay ();
     }
     }
 
 
-    protected internal override bool OnMouseEvent (MouseEvent me)
+    protected override bool OnMouseEvent (MouseEventArgs me)
     {
     {
         if (!_host._handled && !_host.HandleGrabView (me, this))
         if (!_host._handled && !_host.HandleGrabView (me, this))
         {
         {

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

@@ -137,7 +137,7 @@ public class MenuBar : View, IDesignable
                                                   });
                                                   });
         AddCommand (Command.Select, ctx =>
         AddCommand (Command.Select, ctx =>
                                     {
                                     {
-                                        if (ctx.Data is MouseEvent)
+                                        if (ctx.Data is MouseEventArgs)
                                         {
                                         {
                                             // HACK: Work around the fact that View.MouseClick always invokes Select
                                             // HACK: Work around the fact that View.MouseClick always invokes Select
                                             return false;
                                             return false;
@@ -1400,7 +1400,7 @@ public class MenuBar : View, IDesignable
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent me)
+    protected override bool OnMouseEvent (MouseEventArgs me)
     {
     {
         if (!_handled && !HandleGrabView (me, this))
         if (!_handled && !HandleGrabView (me, this))
         {
         {
@@ -1513,7 +1513,7 @@ public class MenuBar : View, IDesignable
     internal bool _isContextMenuLoading;
     internal bool _isContextMenuLoading;
     private MenuBarItem [] _menus = [];
     private MenuBarItem [] _menus = [];
 
 
-    internal bool HandleGrabView (MouseEvent me, View current)
+    internal bool HandleGrabView (MouseEventArgs me, View current)
     {
     {
         if (Application.MouseGrabView is { })
         if (Application.MouseGrabView is { })
         {
         {
@@ -1541,7 +1541,7 @@ public class MenuBar : View, IDesignable
                     Application.UngrabMouse ();
                     Application.UngrabMouse ();
                     View v = me.View;
                     View v = me.View;
                     Application.GrabMouse (v);
                     Application.GrabMouse (v);
-                    MouseEvent nme;
+                    MouseEventArgs nme;
 
 
                     if (me.Position.Y > -1)
                     if (me.Position.Y > -1)
                     {
                     {

+ 5 - 5
Terminal.Gui/Views/RadioGroup.cs

@@ -220,12 +220,12 @@ public class RadioGroup : View, IDesignable, IOrientation
     /// </remarks>
     /// </remarks>
     public bool DoubleClickAccepts { get; set; } = true;
     public bool DoubleClickAccepts { get; set; } = true;
 
 
-    private void RadioGroup_MouseClick (object? sender, MouseEventEventArgs e)
+    private void RadioGroup_MouseClick (object? sender, MouseEventArgs e)
     {
     {
-        if (e.MouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked))
+        if (e.Flags.HasFlag (MouseFlags.Button1Clicked))
         {
         {
-            int viewportX = e.MouseEvent.Position.X;
-            int viewportY = e.MouseEvent.Position.Y;
+            int viewportX = e.Position.X;
+            int viewportY = e.Position.Y;
 
 
             int pos = Orientation == Orientation.Horizontal ? viewportX : viewportY;
             int pos = Orientation == Orientation.Horizontal ? viewportX : viewportY;
 
 
@@ -249,7 +249,7 @@ public class RadioGroup : View, IDesignable, IOrientation
             return;
             return;
         }
         }
 
 
-        if (DoubleClickAccepts && e.MouseEvent.Flags.HasFlag (MouseFlags.Button1DoubleClicked))
+        if (DoubleClickAccepts && e.Flags.HasFlag (MouseFlags.Button1DoubleClicked))
         {
         {
             // NOTE: Drivers ALWAYS generate a Button1Clicked event before Button1DoubleClicked
             // NOTE: Drivers ALWAYS generate a Button1Clicked event before Button1DoubleClicked
             // NOTE: So, we've already selected an item.
             // NOTE: So, we've already selected an item.

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

@@ -270,7 +270,7 @@ public class ScrollBarView : View
     public event EventHandler ChangedPosition;
     public event EventHandler ChangedPosition;
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent mouseEvent)
+    protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
     {
     {
         if (mouseEvent.Flags != MouseFlags.Button1Pressed
         if (mouseEvent.Flags != MouseFlags.Button1Pressed
             && mouseEvent.Flags != MouseFlags.Button1DoubleClicked
             && mouseEvent.Flags != MouseFlags.Button1DoubleClicked
@@ -777,16 +777,16 @@ public class ScrollBarView : View
     //	}
     //	}
     //}
     //}
 
 
-    private void ContentBottomRightCorner_MouseClick (object sender, MouseEventEventArgs me)
+    private void ContentBottomRightCorner_MouseClick (object sender, MouseEventArgs me)
     {
     {
-        if (me.MouseEvent.Flags == MouseFlags.WheeledDown
-            || me.MouseEvent.Flags == MouseFlags.WheeledUp
-            || me.MouseEvent.Flags == MouseFlags.WheeledRight
-            || me.MouseEvent.Flags == MouseFlags.WheeledLeft)
+        if (me.Flags == MouseFlags.WheeledDown
+            || me.Flags == MouseFlags.WheeledUp
+            || me.Flags == MouseFlags.WheeledRight
+            || me.Flags == MouseFlags.WheeledLeft)
         {
         {
-            NewMouseEvent (me.MouseEvent);
+            NewMouseEvent (me);
         }
         }
-        else if (me.MouseEvent.Flags == MouseFlags.Button1Clicked)
+        else if (me.Flags == MouseFlags.Button1Clicked)
         {
         {
             Host.SetFocus ();
             Host.SetFocus ();
         }
         }

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

@@ -406,7 +406,7 @@ public class ScrollView : View
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent me)
+    protected override bool OnMouseEvent (MouseEventArgs me)
     {
     {
         if (!Enabled)
         if (!Enabled)
         {
         {
@@ -416,19 +416,19 @@ public class ScrollView : View
 
 
         if (me.Flags == MouseFlags.WheeledDown && ShowVerticalScrollIndicator)
         if (me.Flags == MouseFlags.WheeledDown && ShowVerticalScrollIndicator)
         {
         {
-            ScrollDown (1);
+            return ScrollDown (1);
         }
         }
         else if (me.Flags == MouseFlags.WheeledUp && ShowVerticalScrollIndicator)
         else if (me.Flags == MouseFlags.WheeledUp && ShowVerticalScrollIndicator)
         {
         {
-            ScrollUp (1);
+            return ScrollUp (1);
         }
         }
         else if (me.Flags == MouseFlags.WheeledRight && _showHorizontalScrollIndicator)
         else if (me.Flags == MouseFlags.WheeledRight && _showHorizontalScrollIndicator)
         {
         {
-            ScrollRight (1);
+            return ScrollRight (1);
         }
         }
         else if (me.Flags == MouseFlags.WheeledLeft && ShowVerticalScrollIndicator)
         else if (me.Flags == MouseFlags.WheeledLeft && ShowVerticalScrollIndicator)
         {
         {
-            ScrollLeft (1);
+            return ScrollLeft (1);
         }
         }
         else if (me.Position.X == _vertical.Frame.X && ShowVerticalScrollIndicator)
         else if (me.Position.X == _vertical.Frame.X && ShowVerticalScrollIndicator)
         {
         {
@@ -443,7 +443,7 @@ public class ScrollView : View
             Application.UngrabMouse ();
             Application.UngrabMouse ();
         }
         }
 
 
-        return base.OnMouseEvent (me);
+        return me.Handled;
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>

+ 2 - 4
Terminal.Gui/Views/Slider.cs

@@ -1282,7 +1282,7 @@ public class Slider<T> : View, IOrientation
     private Point? _moveRenderPosition;
     private Point? _moveRenderPosition;
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent mouseEvent)
+    protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
     {
     {
         // Note(jmperricone): Maybe we click to focus the cursor, and on next click we set the option.
         // Note(jmperricone): Maybe we click to focus the cursor, and on next click we set the option.
         //                    That will make OptionFocused Event more relevant.
         //                    That will make OptionFocused Event more relevant.
@@ -1381,11 +1381,9 @@ public class Slider<T> : View, IOrientation
 
 
             mouseEvent.Handled = true;
             mouseEvent.Handled = true;
 
 
-            // BUGBUG: OnMouseClick is/should be internal. 
-            return OnMouseClick (new (mouseEvent));
         }
         }
 
 
-        return false;
+        return mouseEvent.Handled;
 
 
         Point ClampMovePosition (Point position)
         Point ClampMovePosition (Point position)
         {
         {

+ 3 - 3
Terminal.Gui/Views/TabMouseEventArgs.cs

@@ -6,17 +6,17 @@ public class TabMouseEventArgs : EventArgs
     /// <summary>Creates a new instance of the <see cref="TabMouseEventArgs"/> class.</summary>
     /// <summary>Creates a new instance of the <see cref="TabMouseEventArgs"/> class.</summary>
     /// <param name="tab"><see cref="Tab"/> that the mouse was over when the event occurred.</param>
     /// <param name="tab"><see cref="Tab"/> that the mouse was over when the event occurred.</param>
     /// <param name="mouseEvent">The mouse activity being reported</param>
     /// <param name="mouseEvent">The mouse activity being reported</param>
-    public TabMouseEventArgs (Tab tab, MouseEvent mouseEvent)
+    public TabMouseEventArgs (Tab tab, MouseEventArgs mouseEvent)
     {
     {
         Tab = tab;
         Tab = tab;
         MouseEvent = mouseEvent;
         MouseEvent = mouseEvent;
     }
     }
 
 
     /// <summary>
     /// <summary>
-    ///     Gets the actual mouse event.  Use <see cref="MouseEvent.Handled"/> to cancel this event and perform custom
+    ///     Gets the actual mouse event.  Use <see cref="MouseEventArgs.Handled"/> to cancel this event and perform custom
     ///     behavior (e.g. show a context menu).
     ///     behavior (e.g. show a context menu).
     /// </summary>
     /// </summary>
-    public MouseEvent MouseEvent { get; }
+    public MouseEventArgs MouseEvent { get; }
 
 
     /// <summary>Gets the <see cref="Tab"/> (if any) that the mouse was over when the <see cref="MouseEvent"/> occurred.</summary>
     /// <summary>Gets the <see cref="Tab"/> (if any) that the mouse was over when the <see cref="MouseEvent"/> occurred.</summary>
     /// <remarks>This will be null if the click is after last tab or before first.</remarks>
     /// <remarks>This will be null if the click is after last tab or before first.</remarks>

+ 6 - 14
Terminal.Gui/Views/TabView.cs

@@ -508,9 +508,9 @@ public class TabView : View
         return Style.ShowTopLine ? 3 : 2;
         return Style.ShowTopLine ? 3 : 2;
     }
     }
 
 
-    private void Tab_MouseClick (object sender, MouseEventEventArgs e)
+    private void Tab_MouseClick (object sender, MouseEventArgs e)
     {
     {
-        e.Handled = _tabsBar.NewMouseEvent (e.MouseEvent) == true;
+        e.Handled = _tabsBar.NewMouseEvent (e) == true;
     }
     }
 
 
     private void UnSetCurrentTabs ()
     private void UnSetCurrentTabs ()
@@ -569,15 +569,11 @@ public class TabView : View
             Add (_rightScrollIndicator, _leftScrollIndicator);
             Add (_rightScrollIndicator, _leftScrollIndicator);
         }
         }
 
 
-        protected internal override bool OnMouseEvent (MouseEvent me)
+        protected override bool OnMouseEvent (MouseEventArgs me)
         {
         {
             Tab hit = me.View is Tab ? (Tab)me.View : null;
             Tab hit = me.View is Tab ? (Tab)me.View : null;
 
 
-            bool isClick = me.Flags.HasFlag (MouseFlags.Button1Clicked)
-                           || me.Flags.HasFlag (MouseFlags.Button2Clicked)
-                           || me.Flags.HasFlag (MouseFlags.Button3Clicked);
-
-            if (isClick)
+            if (me.IsSingleClicked)
             {
             {
                 _host.OnTabClicked (new TabMouseEventArgs (hit, me));
                 _host.OnTabClicked (new TabMouseEventArgs (hit, me));
 
 
@@ -588,9 +584,7 @@ public class TabView : View
                 }
                 }
             }
             }
 
 
-            if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)
-                && !me.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
-                && !me.Flags.HasFlag (MouseFlags.Button1TripleClicked))
+            if (!me.IsSingleDoubleOrTripleClicked)
             {
             {
                 return false;
                 return false;
             }
             }
@@ -600,9 +594,7 @@ public class TabView : View
                 SetFocus ();
                 SetFocus ();
             }
             }
 
 
-            if (me.Flags.HasFlag (MouseFlags.Button1Clicked)
-                || me.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
-                || me.Flags.HasFlag (MouseFlags.Button1TripleClicked))
+            if (me.IsSingleDoubleOrTripleClicked)
             {
             {
                 var scrollIndicatorHit = 0;
                 var scrollIndicatorHit = 0;
 
 

+ 3 - 3
Terminal.Gui/Views/TableView/CheckBoxTableSourceWrapper.cs

@@ -150,15 +150,15 @@ public abstract class CheckBoxTableSourceWrapperBase : ITableSource
         tableView.SetNeedsDisplay ();
         tableView.SetNeedsDisplay ();
     }
     }
 
 
-    private void TableView_MouseClick (object sender, MouseEventEventArgs e)
+    private void TableView_MouseClick (object sender, MouseEventArgs e)
     {
     {
         // we only care about clicks (not movements)
         // we only care about clicks (not movements)
-        if (!e.MouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked))
+        if (!e.Flags.HasFlag (MouseFlags.Button1Clicked))
         {
         {
             return;
             return;
         }
         }
 
 
-        Point? hit = tableView.ScreenToCell (e.MouseEvent.Position.X, e.MouseEvent.Position.Y, out int? headerIfAny);
+        Point? hit = tableView.ScreenToCell (e.Position.X, e.Position.Y, out int? headerIfAny);
 
 
         if (headerIfAny.HasValue && headerIfAny.Value == 0)
         if (headerIfAny.HasValue && headerIfAny.Value == 0)
         {
         {

+ 4 - 4
Terminal.Gui/Views/TableView/TableView.cs

@@ -801,7 +801,7 @@ public class TableView : View
     }
     }
 
 
     ///<inheritdoc/>
     ///<inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent me)
+    protected override bool OnMouseEvent (MouseEventArgs me)
     {
     {
         if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)
         if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)
             && !me.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
             && !me.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
@@ -902,11 +902,11 @@ public class TableView : View
 
 
             if (hit is { })
             if (hit is { })
             {
             {
-                OnCellActivated (new CellActivatedEventArgs (Table, hit.Value.X, hit.Value.Y));
+                return OnCellActivated (new CellActivatedEventArgs (Table, hit.Value.X, hit.Value.Y));
             }
             }
         }
         }
 
 
-        return base.OnMouseEvent (me);
+        return me.Handled;
     }
     }
 
 
     ///<inheritdoc/>
     ///<inheritdoc/>
@@ -1646,7 +1646,7 @@ public class TableView : View
         return colStyle is { } ? colStyle.GetRepresentation (value) : value.ToString ();
         return colStyle is { } ? colStyle.GetRepresentation (value) : value.ToString ();
     }
     }
 
 
-    private bool HasControlOrAlt (MouseEvent me) { return me.Flags.HasFlag (MouseFlags.ButtonAlt) || me.Flags.HasFlag (MouseFlags.ButtonCtrl); }
+    private bool HasControlOrAlt (MouseEventArgs me) { return me.Flags.HasFlag (MouseFlags.ButtonAlt) || me.Flags.HasFlag (MouseFlags.ButtonCtrl); }
 
 
     /// <summary>
     /// <summary>
     ///     Returns true if the given <paramref name="columnIndex"/> indexes a visible column otherwise false.  Returns
     ///     Returns true if the given <paramref name="columnIndex"/> indexes a visible column otherwise false.  Returns

+ 2 - 2
Terminal.Gui/Views/TableView/TreeTableSource.cs

@@ -166,9 +166,9 @@ public class TreeTableSource<T> : IEnumerableTableSource<T>, IDisposable where T
         }
         }
     }
     }
 
 
-    private void Table_MouseClick (object sender, MouseEventEventArgs e)
+    private void Table_MouseClick (object sender, MouseEventArgs e)
     {
     {
-        Point? hit = _tableView.ScreenToCell (e.MouseEvent.Position.X, e.MouseEvent.Position.Y, out int? headerIfAny, out int? offsetX);
+        Point? hit = _tableView.ScreenToCell (e.Position.X, e.Position.Y, out int? headerIfAny, out int? offsetX);
 
 
         if (hit is null || headerIfAny is { } || !IsInTreeColumn (hit.Value.X, false) || offsetX is null)
         if (hit is null || headerIfAny is { } || !IsInTreeColumn (hit.Value.X, false) || offsetX is null)
         {
         {

+ 4 - 5
Terminal.Gui/Views/TextField.cs

@@ -798,16 +798,15 @@ public class TextField : View
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent ev)
+    protected override bool OnMouseEvent (MouseEventArgs ev)
     {
     {
-        if (!ev.Flags.HasFlag (MouseFlags.Button1Pressed)
+        if (ev is { IsPressed: false, IsReleased: false }
             && !ev.Flags.HasFlag (MouseFlags.ReportMousePosition)
             && !ev.Flags.HasFlag (MouseFlags.ReportMousePosition)
-            && !ev.Flags.HasFlag (MouseFlags.Button1Released)
             && !ev.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
             && !ev.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
             && !ev.Flags.HasFlag (MouseFlags.Button1TripleClicked)
             && !ev.Flags.HasFlag (MouseFlags.Button1TripleClicked)
             && !ev.Flags.HasFlag (ContextMenu.MouseFlags))
             && !ev.Flags.HasFlag (ContextMenu.MouseFlags))
         {
         {
-            return base.OnMouseEvent (ev);
+            return false;
         }
         }
 
 
         if (!CanFocus)
         if (!CanFocus)
@@ -1645,7 +1644,7 @@ public class TextField : View
         return 0; //offB;
         return 0; //offB;
     }
     }
 
 
-    private int PositionCursor (MouseEvent ev) { return PositionCursor (TextModel.GetColFromX (_text, ScrollOffset, ev.Position.X), false); }
+    private int PositionCursor (MouseEventArgs ev) { return PositionCursor (TextModel.GetColFromX (_text, ScrollOffset, ev.Position.X), false); }
 
 
     private int PositionCursor (int x, bool getX = true)
     private int PositionCursor (int x, bool getX = true)
     {
     {

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

@@ -531,7 +531,7 @@ namespace Terminal.Gui
         }
         }
 
 
         /// <inheritdoc/>
         /// <inheritdoc/>
-        protected internal override bool OnMouseEvent (MouseEvent mouseEvent)
+        protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
         {
         {
             if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed))
             if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed))
             {
             {

+ 4 - 10
Terminal.Gui/Views/TextView.cs

@@ -3274,21 +3274,15 @@ public class TextView : View
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent ev)
+    protected override bool OnMouseEvent (MouseEventArgs ev)
     {
     {
-        if (!ev.Flags.HasFlag (MouseFlags.Button1Clicked)
-            && !ev.Flags.HasFlag (MouseFlags.Button1Pressed)
+        if (ev is { IsSingleDoubleOrTripleClicked: false, IsPressed: false, IsReleased: false, IsWheel: false }
             && !ev.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition)
             && !ev.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition)
-            && !ev.Flags.HasFlag (MouseFlags.Button1Released)
             && !ev.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ButtonShift)
             && !ev.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ButtonShift)
-            && !ev.Flags.HasFlag (MouseFlags.WheeledDown)
-            && !ev.Flags.HasFlag (MouseFlags.WheeledUp)
-            && !ev.Flags.HasFlag (MouseFlags.Button1DoubleClicked)
             && !ev.Flags.HasFlag (MouseFlags.Button1DoubleClicked | MouseFlags.ButtonShift)
             && !ev.Flags.HasFlag (MouseFlags.Button1DoubleClicked | MouseFlags.ButtonShift)
-            && !ev.Flags.HasFlag (MouseFlags.Button1TripleClicked)
             && !ev.Flags.HasFlag (ContextMenu!.MouseFlags))
             && !ev.Flags.HasFlag (ContextMenu!.MouseFlags))
         {
         {
-            return base.OnMouseEvent (ev);
+            return false;
         }
         }
 
 
         if (!CanFocus)
         if (!CanFocus)
@@ -5875,7 +5869,7 @@ public class TextView : View
         KillWordForward ();
         KillWordForward ();
     }
     }
 
 
-    private void ProcessMouseClick (MouseEvent ev, out List<Cell> line)
+    private void ProcessMouseClick (MouseEventArgs ev, out List<Cell> line)
     {
     {
         List<Cell>? r = null;
         List<Cell>? r = null;
 
 

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

@@ -910,7 +910,7 @@ public class TileView : View
             }
             }
         }
         }
 
 
-        protected internal override bool OnMouseEvent (MouseEvent mouseEvent)
+        protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
         {
         {
             if (!dragPosition.HasValue && mouseEvent.Flags == MouseFlags.Button1Pressed)
             if (!dragPosition.HasValue && mouseEvent.Flags == MouseFlags.Button1Pressed)
             {
             {

+ 8 - 5
Terminal.Gui/Views/TimeField.cs

@@ -163,17 +163,20 @@ public class TimeField : TextField
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected internal override bool OnMouseEvent  (MouseEvent ev)
+    protected override bool OnMouseEvent  (MouseEventArgs ev)
     {
     {
-        bool result = base.OnMouseEvent (ev);
+        if (base.OnMouseEvent (ev) || ev.Handled)
+        {
+            return true;
+        }
 
 
-        if (result && SelectedLength == 0 && ev.Flags.HasFlag (MouseFlags.Button1Pressed))
+        if (SelectedLength == 0 && ev.Flags.HasFlag (MouseFlags.Button1Pressed))
         {
         {
             int point = ev.Position.X;
             int point = ev.Position.X;
             AdjCursorPosition (point);
             AdjCursorPosition (point);
         }
         }
 
 
-        return result;
+        return ev.Handled;
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
@@ -227,7 +230,7 @@ public class TimeField : TextField
             CursorPosition = newPoint;
             CursorPosition = newPoint;
         }
         }
 
 
-        while (Text [CursorPosition] == _sepChar [0])
+        while (CursorPosition < Text.GetColumns() -1 && Text [CursorPosition] == _sepChar [0])
         {
         {
             if (increment)
             if (increment)
             {
             {

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

@@ -62,7 +62,7 @@ public partial class Toplevel : View
     /// </summary>
     /// </summary>
     public bool Modal { get; set; }
     public bool Modal { get; set; }
 
 
-    private void Toplevel_MouseClick (object? sender, MouseEventEventArgs e) { e.Handled = InvokeCommand (Command.HotKey) == true; }
+    private void Toplevel_MouseClick (object? sender, MouseEventArgs e) { e.Handled = InvokeCommand (Command.HotKey) == true; }
 
 
     #endregion
     #endregion
 
 

+ 4 - 8
Terminal.Gui/Views/TreeView/TreeView.cs

@@ -990,18 +990,14 @@ public class TreeView<T> : View, ITreeView where T : class
 
 
     // BUGBUG: OnMouseEvent is internal. TreeView should not be overriding.
     // BUGBUG: OnMouseEvent is internal. TreeView should not be overriding.
     ///<inheritdoc/>
     ///<inheritdoc/>
-    protected internal override bool OnMouseEvent (MouseEvent me)
+    protected override bool OnMouseEvent (MouseEventArgs me)
     {
     {
         // If it is not an event we care about
         // If it is not an event we care about
-        if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)
-            && !me.Flags.HasFlag (ObjectActivationButton ?? MouseFlags.Button1DoubleClicked)
-            && !me.Flags.HasFlag (MouseFlags.WheeledDown)
-            && !me.Flags.HasFlag (MouseFlags.WheeledUp)
-            && !me.Flags.HasFlag (MouseFlags.WheeledRight)
-            && !me.Flags.HasFlag (MouseFlags.WheeledLeft))
+        if (me is { IsSingleClicked: false, IsPressed: false, IsReleased: false, IsWheel: false }
+            && !me.Flags.HasFlag (ObjectActivationButton ?? MouseFlags.Button1DoubleClicked))
         {
         {
             // do nothing
             // do nothing
-            return base.OnMouseEvent (me);
+            return false;
         }
         }
 
 
         if (!HasFocus && CanFocus)
         if (!HasFocus && CanFocus)

+ 4 - 4
UICatalog/Scenarios/ASCIICustomButton.cs

@@ -127,7 +127,7 @@ public class ASCIICustomButtonTest : Scenario
         }
         }
 
 
         public event Action<ASCIICustomButton> PointerEnter;
         public event Action<ASCIICustomButton> PointerEnter;
-        private void This_MouseClick (object sender, MouseEventEventArgs obj) { NewMouseEvent (obj.MouseEvent); }
+        private void This_MouseClick (object sender, MouseEventArgs obj) { NewMouseEvent (obj); }
     }
     }
 
 
     public class ScrollViewTestWindow : Window
     public class ScrollViewTestWindow : Window
@@ -310,9 +310,9 @@ public class ASCIICustomButtonTest : Scenario
             }
             }
         }
         }
 
 
-        private void Button_MouseClick (object sender, MouseEventEventArgs obj)
+        private void Button_MouseClick (object sender, MouseEventArgs obj)
         {
         {
-            if (obj.MouseEvent.Flags == MouseFlags.WheeledDown)
+            if (obj.Flags == MouseFlags.WheeledDown)
             {
             {
                 _scrollView.ContentOffset = new Point (
                 _scrollView.ContentOffset = new Point (
                                                        _scrollView.ContentOffset.X,
                                                        _scrollView.ContentOffset.X,
@@ -320,7 +320,7 @@ public class ASCIICustomButtonTest : Scenario
                                                       );
                                                       );
                 obj.Handled = true;
                 obj.Handled = true;
             }
             }
-            else if (obj.MouseEvent.Flags == MouseFlags.WheeledUp)
+            else if (obj.Flags == MouseFlags.WheeledUp)
             {
             {
                 _scrollView.ContentOffset = new Point (
                 _scrollView.ContentOffset = new Point (
                                                        _scrollView.ContentOffset.X,
                                                        _scrollView.ContentOffset.X,

+ 1 - 1
UICatalog/Scenarios/AdornmentsEditor.cs

@@ -108,7 +108,7 @@ public class AdornmentsEditor : View
         ViewToEdit = Application.Navigation!.GetFocused ();
         ViewToEdit = Application.Navigation!.GetFocused ();
     }
     }
 
 
-    private void ApplicationOnMouseEvent (object? sender, MouseEvent e)
+    private void ApplicationOnMouseEvent (object? sender, MouseEventArgs e)
     {
     {
         if (e.Flags != MouseFlags.Button1Clicked || !AutoSelectViewToEdit)
         if (e.Flags != MouseFlags.Button1Clicked || !AutoSelectViewToEdit)
         {
         {

+ 1 - 1
UICatalog/Scenarios/ArrangementEditor.cs

@@ -147,7 +147,7 @@ public sealed class ArrangementEditor : View
         }
         }
     }
     }
 
 
-    private void ApplicationOnMouseEvent (object? sender, MouseEvent e)
+    private void ApplicationOnMouseEvent (object? sender, MouseEventArgs e)
     {
     {
         if (e.Flags != MouseFlags.Button1Clicked || !AutoSelectViewToEdit)
         if (e.Flags != MouseFlags.Button1Clicked || !AutoSelectViewToEdit)
         {
         {

+ 8 - 8
UICatalog/Scenarios/Bars.cs

@@ -187,12 +187,12 @@ public class Bars : Scenario
 
 
         menuLikeExamples.MouseClick += MenuLikeExamplesMouseClick;
         menuLikeExamples.MouseClick += MenuLikeExamplesMouseClick;
 
 
-        void MenuLikeExamplesMouseClick (object sender, MouseEventEventArgs e)
+        void MenuLikeExamplesMouseClick (object sender, MouseEventArgs e)
         {
         {
-            if (e.MouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked))
+            if (e.Flags.HasFlag (MouseFlags.Button3Clicked))
             {
             {
-                popOverMenu.X = e.MouseEvent.Position.X;
-                popOverMenu.Y = e.MouseEvent.Position.Y;
+                popOverMenu.X = e.Position.X;
+                popOverMenu.Y = e.Position.Y;
                 popOverMenu.Visible = true;
                 popOverMenu.Visible = true;
                 //popOverMenu.Enabled = popOverMenu.Visible;
                 //popOverMenu.Enabled = popOverMenu.Visible;
                 popOverMenu.SetFocus ();
                 popOverMenu.SetFocus ();
@@ -275,7 +275,7 @@ public class Bars : Scenario
 
 
     //private void ShowContextMenu (object s, MouseEventEventArgs e)
     //private void ShowContextMenu (object s, MouseEventEventArgs e)
     //{
     //{
-    //    if (e.MouseEvent.Flags != MouseFlags.Button3Clicked)
+    //    if (e.Flags != MouseFlags.Button3Clicked)
     //    {
     //    {
     //        return;
     //        return;
     //    }
     //    }
@@ -283,8 +283,8 @@ public class Bars : Scenario
     //    var contextMenu = new Bar
     //    var contextMenu = new Bar
     //    {
     //    {
     //        Id = "contextMenu",
     //        Id = "contextMenu",
-    //        X = e.MouseEvent.Position.X,
-    //        Y = e.MouseEvent.Position.Y,
+    //        X = e.Position.X,
+    //        Y = e.Position.Y,
     //        Width = Dim.Auto (DimAutoStyle.Content),
     //        Width = Dim.Auto (DimAutoStyle.Content),
     //        Height = Dim.Auto (DimAutoStyle.Content),
     //        Height = Dim.Auto (DimAutoStyle.Content),
     //        Orientation = Orientation.Vertical,
     //        Orientation = Orientation.Vertical,
@@ -387,7 +387,7 @@ public class Bars : Scenario
 
 
     //    contextMenu.Initialized += Menu_Initialized;
     //    contextMenu.Initialized += Menu_Initialized;
 
 
-    //    void Application_MouseEvent (object sender, MouseEvent e)
+    //    void Application_MouseEvent (object sender, MouseEventArgs e)
     //    {
     //    {
     //        // If user clicks outside of the menuWindow, close it
     //        // If user clicks outside of the menuWindow, close it
     //        if (!contextMenu.Frame.Contains (e.Position.X, e.Position.Y))
     //        if (!contextMenu.Frame.Contains (e.Position.X, e.Position.Y))

+ 9 - 11
UICatalog/Scenarios/CharacterMap.cs

@@ -98,9 +98,9 @@ public class CharacterMap : Scenario
         // if user clicks the mouse in TableView
         // if user clicks the mouse in TableView
         _categoryList.MouseClick += (s, e) =>
         _categoryList.MouseClick += (s, e) =>
                                     {
                                     {
-                                        _categoryList.ScreenToCell (e.MouseEvent.Position, out int? clickedCol);
+                                        _categoryList.ScreenToCell (e.Position, out int? clickedCol);
 
 
-                                        if (clickedCol != null && e.MouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked))
+                                        if (clickedCol != null && e.Flags.HasFlag (MouseFlags.Button1Clicked))
                                         {
                                         {
                                             EnumerableTableSource<UnicodeRange> table = (EnumerableTableSource<UnicodeRange>)_categoryList.Table;
                                             EnumerableTableSource<UnicodeRange> table = (EnumerableTableSource<UnicodeRange>)_categoryList.Table;
                                             string prevSelection = table.Data.ElementAt (_categoryList.SelectedRow).Category;
                                             string prevSelection = table.Data.ElementAt (_categoryList.SelectedRow).Category;
@@ -527,9 +527,9 @@ internal class CharMap : View
         Padding.Add (up, down, left, right);
         Padding.Add (up, down, left, right);
     }
     }
 
 
-    private void Handle_MouseEvent (object sender, MouseEventEventArgs e)
+    private void Handle_MouseEvent (object sender, MouseEventArgs e)
     {
     {
-        if (e.MouseEvent.Flags == MouseFlags.WheeledDown)
+        if (e.Flags == MouseFlags.WheeledDown)
         {
         {
             ScrollVertical (1);
             ScrollVertical (1);
             e.Handled = true;
             e.Handled = true;
@@ -537,7 +537,7 @@ internal class CharMap : View
             return;
             return;
         }
         }
 
 
-        if (e.MouseEvent.Flags == MouseFlags.WheeledUp)
+        if (e.Flags == MouseFlags.WheeledUp)
         {
         {
             ScrollVertical (-1);
             ScrollVertical (-1);
             e.Handled = true;
             e.Handled = true;
@@ -545,7 +545,7 @@ internal class CharMap : View
             return;
             return;
         }
         }
 
 
-        if (e.MouseEvent.Flags == MouseFlags.WheeledRight)
+        if (e.Flags == MouseFlags.WheeledRight)
         {
         {
             ScrollHorizontal (1);
             ScrollHorizontal (1);
             e.Handled = true;
             e.Handled = true;
@@ -553,7 +553,7 @@ internal class CharMap : View
             return;
             return;
         }
         }
 
 
-        if (e.MouseEvent.Flags == MouseFlags.WheeledLeft)
+        if (e.Flags == MouseFlags.WheeledLeft)
         {
         {
             ScrollHorizontal (-1);
             ScrollHorizontal (-1);
             e.Handled = true;
             e.Handled = true;
@@ -839,10 +839,8 @@ internal class CharMap : View
     private void CopyCodePoint () { Clipboard.Contents = $"U+{SelectedCodePoint:x5}"; }
     private void CopyCodePoint () { Clipboard.Contents = $"U+{SelectedCodePoint:x5}"; }
     private void CopyGlyph () { Clipboard.Contents = $"{new Rune (SelectedCodePoint)}"; }
     private void CopyGlyph () { Clipboard.Contents = $"{new Rune (SelectedCodePoint)}"; }
 
 
-    private void Handle_MouseClick (object sender, MouseEventEventArgs args)
+    private void Handle_MouseClick (object sender, MouseEventArgs me)
     {
     {
-        MouseEvent me = args.MouseEvent;
-
         if (me.Flags != MouseFlags.ReportMousePosition && me.Flags != MouseFlags.Button1Clicked && me.Flags != MouseFlags.Button1DoubleClicked)
         if (me.Flags != MouseFlags.ReportMousePosition && me.Flags != MouseFlags.Button1Clicked && me.Flags != MouseFlags.Button1DoubleClicked)
         {
         {
             return;
             return;
@@ -883,7 +881,7 @@ internal class CharMap : View
             SetFocus ();
             SetFocus ();
         }
         }
 
 
-        args.Handled = true;
+        me.Handled = true;
 
 
         if (me.Flags == MouseFlags.Button1Clicked)
         if (me.Flags == MouseFlags.Button1Clicked)
         {
         {

+ 5 - 5
UICatalog/Scenarios/ContentScrolling.cs

@@ -52,30 +52,30 @@ public class ContentScrolling : Scenario
             MouseEvent += VirtualDemoView_MouseEvent;
             MouseEvent += VirtualDemoView_MouseEvent;
         }
         }
 
 
-        private void VirtualDemoView_MouseEvent (object sender, MouseEventEventArgs e)
+        private void VirtualDemoView_MouseEvent (object sender, MouseEventArgs e)
         {
         {
-            if (e.MouseEvent.Flags == MouseFlags.WheeledDown)
+            if (e.Flags == MouseFlags.WheeledDown)
             {
             {
                 ScrollVertical (1);
                 ScrollVertical (1);
 
 
                 return;
                 return;
             }
             }
 
 
-            if (e.MouseEvent.Flags == MouseFlags.WheeledUp)
+            if (e.Flags == MouseFlags.WheeledUp)
             {
             {
                 ScrollVertical (-1);
                 ScrollVertical (-1);
 
 
                 return;
                 return;
             }
             }
 
 
-            if (e.MouseEvent.Flags == MouseFlags.WheeledRight)
+            if (e.Flags == MouseFlags.WheeledRight)
             {
             {
                 ScrollHorizontal (1);
                 ScrollHorizontal (1);
 
 
                 return;
                 return;
             }
             }
 
 
-            if (e.MouseEvent.Flags == MouseFlags.WheeledLeft)
+            if (e.Flags == MouseFlags.WheeledLeft)
             {
             {
                 ScrollHorizontal (-1);
                 ScrollHorizontal (-1);
             }
             }

+ 3 - 3
UICatalog/Scenarios/ContextMenus.cs

@@ -75,16 +75,16 @@ public class ContextMenus : Scenario
 
 
         appWindow.MouseClick += (s, e) =>
         appWindow.MouseClick += (s, e) =>
                                 {
                                 {
-                                    if (e.MouseEvent.Flags == _contextMenu.MouseFlags)
+                                    if (e.Flags == _contextMenu.MouseFlags)
                                     {
                                     {
-                                        ShowContextMenu (e.MouseEvent.Position.X, e.MouseEvent.Position.Y);
+                                        ShowContextMenu (e.Position.X, e.Position.Y);
                                         e.Handled = true;
                                         e.Handled = true;
                                     }
                                     }
                                 };
                                 };
 
 
         Application.MouseEvent += ApplicationMouseEvent;
         Application.MouseEvent += ApplicationMouseEvent;
 
 
-        void ApplicationMouseEvent (object sender, MouseEvent a) { mousePos = a.Position; }
+        void ApplicationMouseEvent (object sender, MouseEventArgs a) { mousePos = a.Position; }
 
 
         appWindow.WantMousePositionReports = true;
         appWindow.WantMousePositionReports = true;
 
 

+ 10 - 6
UICatalog/Scenarios/LineDrawing.cs

@@ -8,7 +8,7 @@ namespace UICatalog.Scenarios;
 
 
 public interface ITool
 public interface ITool
 {
 {
-    void OnMouseEvent (DrawingArea area, MouseEvent mouseEvent);
+    void OnMouseEvent (DrawingArea area, MouseEventArgs mouseEvent);
 }
 }
 
 
 internal class DrawLineTool : ITool
 internal class DrawLineTool : ITool
@@ -17,7 +17,7 @@ internal class DrawLineTool : ITool
     public LineStyle LineStyle { get; set; } = LineStyle.Single;
     public LineStyle LineStyle { get; set; } = LineStyle.Single;
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    public void OnMouseEvent (DrawingArea area, MouseEvent mouseEvent)
+    public void OnMouseEvent (DrawingArea area, MouseEventArgs mouseEvent)
     {
     {
         if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed))
         if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed))
         {
         {
@@ -96,6 +96,8 @@ internal class DrawLineTool : ITool
                 area.SetNeedsDisplay ();
                 area.SetNeedsDisplay ();
             }
             }
         }
         }
+
+        mouseEvent.Handled = true;
     }
     }
 }
 }
 
 
@@ -321,11 +323,11 @@ public class DrawingArea : View
         return false;
         return false;
     }
     }
 
 
-    protected override bool OnMouseEvent (MouseEvent mouseEvent)
+    protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
     {
     {
         CurrentTool.OnMouseEvent (this, mouseEvent);
         CurrentTool.OnMouseEvent (this, mouseEvent);
 
 
-        return base.OnMouseEvent (mouseEvent);
+        return mouseEvent.Handled;
     }
     }
 
 
     internal void AddLayer ()
     internal void AddLayer ()
@@ -429,7 +431,7 @@ public class AttributeView : View
     }
     }
 
 
     /// <inheritdoc/>
     /// <inheritdoc/>
-    protected override bool OnMouseEvent (MouseEvent mouseEvent)
+    protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
     {
     {
         if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked))
         if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked))
         {
         {
@@ -441,9 +443,11 @@ public class AttributeView : View
             {
             {
                 ClickedInBackground ();
                 ClickedInBackground ();
             }
             }
+
+            mouseEvent.Handled = true;
         }
         }
 
 
-        return base.OnMouseEvent (mouseEvent);
+        return mouseEvent.Handled;
     }
     }
 
 
     private bool IsForegroundPoint (int x, int y) { return ForegroundPoints.Contains ((x, y)); }
     private bool IsForegroundPoint (int x, int y) { return ForegroundPoints.Contains ((x, y)); }

+ 1 - 1
UICatalog/Scenarios/ListColumns.cs

@@ -248,7 +248,7 @@ public class ListColumns : Scenario
         };
         };
 
 
         // if user clicks the mouse in TableView
         // if user clicks the mouse in TableView
-        _listColView.MouseClick += (s, e) => { _listColView.ScreenToCell (e.MouseEvent.Position, out int? clickedCol); };
+        _listColView.MouseClick += (s, e) => { _listColView.ScreenToCell (e.Position, out int? clickedCol); };
 
 
         _listColView.KeyBindings.ReplaceCommands (Key.Space, Command.Accept);
         _listColView.KeyBindings.ReplaceCommands (Key.Space, Command.Accept);
 
 

+ 3 - 3
UICatalog/Scenarios/Mouse.cs

@@ -251,18 +251,18 @@ public class Mouse : Scenario
 
 
         win.MouseEvent += (sender, a) =>
         win.MouseEvent += (sender, a) =>
                           {
                           {
-                              int i = filterSlider.Options.FindIndex (o => o.Data == a.MouseEvent.Flags);
+                              int i = filterSlider.Options.FindIndex (o => o.Data == a.Flags);
 
 
                               if (filterSlider.GetSetOptions ().Contains (i))
                               if (filterSlider.GetSetOptions ().Contains (i))
                               {
                               {
-                                  winLogList.Add ($"MouseEvent: ({a.MouseEvent.Position}) - {a.MouseEvent.Flags} {count++}");
+                                  winLogList.Add ($"MouseEvent: ({a.Position}) - {a.Flags} {count++}");
                                   winLog.MoveDown ();
                                   winLog.MoveDown ();
                               }
                               }
                           };
                           };
 
 
         win.MouseClick += (sender, a) =>
         win.MouseClick += (sender, a) =>
                           {
                           {
-                              winLogList.Add ($"MouseClick: ({a.MouseEvent.Position}) - {a.MouseEvent.Flags} {count++}");
+                              winLogList.Add ($"MouseClick: ({a.Position}) - {a.Flags} {count++}");
                               winLog.MoveDown ();
                               winLog.MoveDown ();
                           };
                           };
 
 

+ 5 - 5
UICatalog/Scenarios/TableEditor.cs

@@ -752,16 +752,16 @@ public class TableEditor : Scenario
                                          return;
                                          return;
                                      }
                                      }
 
 
-                                     _tableView.ScreenToCell (e.MouseEvent.Position, out int? clickedCol);
+                                     _tableView.ScreenToCell (e.Position, out int? clickedCol);
 
 
                                      if (clickedCol != null)
                                      if (clickedCol != null)
                                      {
                                      {
-                                         if (e.MouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked))
+                                         if (e.Flags.HasFlag (MouseFlags.Button1Clicked))
                                          {
                                          {
                                              // left click in a header
                                              // left click in a header
                                              SortColumn (clickedCol.Value);
                                              SortColumn (clickedCol.Value);
                                          }
                                          }
-                                         else if (e.MouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked))
+                                         else if (e.Flags.HasFlag (MouseFlags.Button3Clicked))
                                          {
                                          {
                                              // right click in a header
                                              // right click in a header
                                              ShowHeaderContextMenu (clickedCol.Value, e);
                                              ShowHeaderContextMenu (clickedCol.Value, e);
@@ -1254,7 +1254,7 @@ public class TableEditor : Scenario
         _tableView.Update ();
         _tableView.Update ();
     }
     }
 
 
-    private void ShowHeaderContextMenu (int clickedCol, MouseEventEventArgs e)
+    private void ShowHeaderContextMenu (int clickedCol, MouseEventArgs e)
     {
     {
         if (HasCheckboxes () && clickedCol == 0)
         if (HasCheckboxes () && clickedCol == 0)
         {
         {
@@ -1266,7 +1266,7 @@ public class TableEditor : Scenario
 
 
         var contextMenu = new ContextMenu
         var contextMenu = new ContextMenu
         {
         {
-            Position = new (e.MouseEvent.Position.X + 1, e.MouseEvent.Position.Y + 1)
+            Position = new (e.Position.X + 1, e.Position.Y + 1)
         };
         };
 
 
         MenuBarItem menuItems = new (
         MenuBarItem menuItems = new (

+ 5 - 5
UICatalog/Scenarios/TreeViewFileSystem.cs

@@ -484,12 +484,12 @@ public class TreeViewFileSystem : Scenario
         }
         }
     }
     }
 
 
-    private void TreeViewFiles_MouseClick (object sender, MouseEventEventArgs obj)
+    private void TreeViewFiles_MouseClick (object sender, MouseEventArgs obj)
     {
     {
         // if user right clicks
         // if user right clicks
-        if (obj.MouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked))
+        if (obj.Flags.HasFlag (MouseFlags.Button3Clicked))
         {
         {
-            IFileSystemInfo rightClicked = _treeViewFiles.GetObjectOnRow (obj.MouseEvent.Position.Y);
+            IFileSystemInfo rightClicked = _treeViewFiles.GetObjectOnRow (obj.Position.Y);
 
 
             // nothing was clicked
             // nothing was clicked
             if (rightClicked == null)
             if (rightClicked == null)
@@ -499,8 +499,8 @@ public class TreeViewFileSystem : Scenario
 
 
             ShowContextMenu (
             ShowContextMenu (
                              new Point (
                              new Point (
-                                        obj.MouseEvent.Position.X + _treeViewFiles.Frame.X,
-                                        obj.MouseEvent.Position.Y + _treeViewFiles.Frame.Y + 2
+                                        obj.Position.X + _treeViewFiles.Frame.X,
+                                        obj.Position.Y + _treeViewFiles.Frame.Y + 2
                                        ),
                                        ),
                              rightClicked
                              rightClicked
                             );
                             );

+ 3 - 3
UnitTests/Application/ApplicationTests.cs

@@ -856,7 +856,7 @@ public class ApplicationTests
                                      }
                                      }
                                      else if (iteration < 3)
                                      else if (iteration < 3)
                                      {
                                      {
-                                         Application.OnMouseEvent (new () { Flags = MouseFlags.ReportMousePosition });
+                                         Application.RaiseMouseEvent (new () { Flags = MouseFlags.ReportMousePosition });
                                          Assert.False (top.NeedsDisplay);
                                          Assert.False (top.NeedsDisplay);
                                          Assert.False (top.SubViewNeedsDisplay);
                                          Assert.False (top.SubViewNeedsDisplay);
                                          Assert.False (top.LayoutNeeded);
                                          Assert.False (top.LayoutNeeded);
@@ -895,12 +895,12 @@ public class ApplicationTests
         // Don't use visuals to test as style of border can change over time.
         // Don't use visuals to test as style of border can change over time.
         Assert.Equal (new (0, 0), w.Frame.Location);
         Assert.Equal (new (0, 0), w.Frame.Location);
 
 
-        Application.OnMouseEvent (new () { Flags = MouseFlags.Button1Pressed });
+        Application.RaiseMouseEvent (new () { Flags = MouseFlags.Button1Pressed });
         Assert.Equal (w.Border, Application.MouseGrabView);
         Assert.Equal (w.Border, Application.MouseGrabView);
         Assert.Equal (new (0, 0), w.Frame.Location);
         Assert.Equal (new (0, 0), w.Frame.Location);
 
 
         // Move down and to the right.
         // Move down and to the right.
-        Application.OnMouseEvent (new () { ScreenPosition = new (1, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
         Assert.Equal (new (1, 1), w.Frame.Location);
         Assert.Equal (new (1, 1), w.Frame.Location);
 
 
         Application.End (rs);
         Application.End (rs);

+ 3 - 3
UnitTests/Application/Mouse/ApplicationMouseEnterLeaveTests.cs

@@ -47,7 +47,7 @@ public class ApplicationMouseEnterLeaveTests
         var mousePosition = new Point (1, 1);
         var mousePosition = new Point (1, 1);
         List<View> currentViewsUnderMouse = new () { view };
         List<View> currentViewsUnderMouse = new () { view };
 
 
-        var mouseEvent = new MouseEvent
+        var mouseEvent = new MouseEventArgs
         {
         {
             Position = mousePosition,
             Position = mousePosition,
             ScreenPosition = mousePosition
             ScreenPosition = mousePosition
@@ -80,7 +80,7 @@ public class ApplicationMouseEnterLeaveTests
         Application.Top.Add (view);
         Application.Top.Add (view);
         var mousePosition = new Point (0, 0);
         var mousePosition = new Point (0, 0);
         List<View> currentViewsUnderMouse = new ();
         List<View> currentViewsUnderMouse = new ();
-        var mouseEvent = new MouseEvent ();
+        var mouseEvent = new MouseEventArgs ();
 
 
         Application._cachedViewsUnderMouse.Clear ();
         Application._cachedViewsUnderMouse.Clear ();
         Application._cachedViewsUnderMouse.Add (view);
         Application._cachedViewsUnderMouse.Add (view);
@@ -203,7 +203,7 @@ public class ApplicationMouseEnterLeaveTests
         Application.Top.Add (view);
         Application.Top.Add (view);
         var mousePosition = new Point (0, 0);
         var mousePosition = new Point (0, 0);
         List<View> currentViewsUnderMouse = new ();
         List<View> currentViewsUnderMouse = new ();
-        var mouseEvent = new MouseEvent ();
+        var mouseEvent = new MouseEventArgs ();
 
 
         Application._cachedViewsUnderMouse.Clear ();
         Application._cachedViewsUnderMouse.Clear ();
 
 

+ 16 - 16
UnitTests/Application/Mouse/ApplicationMouseTests.cs

@@ -42,10 +42,10 @@ public class ApplicationMouseTests
         bool expectedClicked
         bool expectedClicked
     )
     )
     {
     {
-        var mouseEvent = new MouseEvent { ScreenPosition = new (clickX, clickY), Flags = MouseFlags.Button1Pressed };
+        var mouseEvent = new MouseEventArgs { ScreenPosition = new (clickX, clickY), Flags = MouseFlags.Button1Pressed };
         var clicked = false;
         var clicked = false;
 
 
-        void OnApplicationOnMouseEvent (object s, MouseEvent e)
+        void OnApplicationOnMouseEvent (object s, MouseEventArgs e)
         {
         {
             Assert.Equal (expectedX, e.ScreenPosition.X);
             Assert.Equal (expectedX, e.ScreenPosition.X);
             Assert.Equal (expectedY, e.ScreenPosition.Y);
             Assert.Equal (expectedY, e.ScreenPosition.Y);
@@ -54,7 +54,7 @@ public class ApplicationMouseTests
 
 
         Application.MouseEvent += OnApplicationOnMouseEvent;
         Application.MouseEvent += OnApplicationOnMouseEvent;
 
 
-        Application.OnMouseEvent (mouseEvent);
+        Application.RaiseMouseEvent (mouseEvent);
         Assert.Equal (expectedClicked, clicked);
         Assert.Equal (expectedClicked, clicked);
         Application.MouseEvent -= OnApplicationOnMouseEvent;
         Application.MouseEvent -= OnApplicationOnMouseEvent;
     }
     }
@@ -116,12 +116,12 @@ public class ApplicationMouseTests
             Height = size.Height
             Height = size.Height
         };
         };
 
 
-        var mouseEvent = new MouseEvent { ScreenPosition = new (clickX, clickY), Flags = MouseFlags.Button1Clicked };
+        var mouseEvent = new MouseEventArgs { ScreenPosition = new (clickX, clickY), Flags = MouseFlags.Button1Clicked };
 
 
         view.MouseClick += (s, e) =>
         view.MouseClick += (s, e) =>
                            {
                            {
-                               Assert.Equal (expectedX, e.MouseEvent.Position.X);
-                               Assert.Equal (expectedY, e.MouseEvent.Position.Y);
+                               Assert.Equal (expectedX, e.Position.X);
+                               Assert.Equal (expectedY, e.Position.Y);
                                clicked = true;
                                clicked = true;
                            };
                            };
 
 
@@ -129,7 +129,7 @@ public class ApplicationMouseTests
         top.Add (view);
         top.Add (view);
         Application.Begin (top);
         Application.Begin (top);
 
 
-        Application.OnMouseEvent (mouseEvent);
+        Application.RaiseMouseEvent (mouseEvent);
         Assert.Equal (expectedClicked, clicked);
         Assert.Equal (expectedClicked, clicked);
         top.Dispose ();
         top.Dispose ();
     }
     }
@@ -218,16 +218,16 @@ public class ApplicationMouseTests
 
 
         Application.Top.Add (view);
         Application.Top.Add (view);
 
 
-        var mouseEvent = new MouseEvent { Position = new (clickX, clickY), ScreenPosition = new (clickX, clickY), Flags = MouseFlags.Button1Clicked };
+        var mouseEvent = new MouseEventArgs { Position = new (clickX, clickY), ScreenPosition = new (clickX, clickY), Flags = MouseFlags.Button1Clicked };
 
 
         view.MouseClick += (s, e) =>
         view.MouseClick += (s, e) =>
                            {
                            {
-                               Assert.Equal (expectedX, e.MouseEvent.Position.X);
-                               Assert.Equal (expectedY, e.MouseEvent.Position.Y);
+                               Assert.Equal (expectedX, e.Position.X);
+                               Assert.Equal (expectedY, e.Position.Y);
                                clicked = true;
                                clicked = true;
                            };
                            };
 
 
-        Application.OnMouseEvent (mouseEvent);
+        Application.RaiseMouseEvent (mouseEvent);
         Assert.Equal (expectedClicked, clicked);
         Assert.Equal (expectedClicked, clicked);
         Application.Top.Dispose ();
         Application.Top.Dispose ();
         Application.ResetState (ignoreDisposed: true);
         Application.ResetState (ignoreDisposed: true);
@@ -261,7 +261,7 @@ public class ApplicationMouseTests
                                          Assert.True (tf.HasFocus);
                                          Assert.True (tf.HasFocus);
                                          Assert.Null (Application.MouseGrabView);
                                          Assert.Null (Application.MouseGrabView);
 
 
-                                         Application.OnMouseEvent (new () { ScreenPosition = new (5, 5), Flags = MouseFlags.ReportMousePosition });
+                                         Application.RaiseMouseEvent (new () { ScreenPosition = new (5, 5), Flags = MouseFlags.ReportMousePosition });
 
 
                                          Assert.Equal (sv, Application.MouseGrabView);
                                          Assert.Equal (sv, Application.MouseGrabView);
 
 
@@ -275,15 +275,15 @@ public class ApplicationMouseTests
                                          // another toplevel (Dialog) was opened
                                          // another toplevel (Dialog) was opened
                                          Assert.Null (Application.MouseGrabView);
                                          Assert.Null (Application.MouseGrabView);
 
 
-                                         Application.OnMouseEvent (new () { ScreenPosition = new (5, 5), Flags = MouseFlags.ReportMousePosition });
+                                         Application.RaiseMouseEvent (new () { ScreenPosition = new (5, 5), Flags = MouseFlags.ReportMousePosition });
 
 
                                          Assert.Null (Application.MouseGrabView);
                                          Assert.Null (Application.MouseGrabView);
 
 
-                                         Application.OnMouseEvent (new () { ScreenPosition = new (40, 12), Flags = MouseFlags.ReportMousePosition });
+                                         Application.RaiseMouseEvent (new () { ScreenPosition = new (40, 12), Flags = MouseFlags.ReportMousePosition });
 
 
                                          Assert.Null (Application.MouseGrabView);
                                          Assert.Null (Application.MouseGrabView);
 
 
-                                         Application.OnMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Pressed });
+                                         Application.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Pressed });
 
 
                                          Assert.Null (Application.MouseGrabView);
                                          Assert.Null (Application.MouseGrabView);
 
 
@@ -402,7 +402,7 @@ public class ApplicationMouseTests
         Assert.True (view.WasDisposed);
         Assert.True (view.WasDisposed);
 #endif
 #endif
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Pressed });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Pressed });
         Assert.Null (Application.MouseGrabView);
         Assert.Null (Application.MouseGrabView);
         Assert.Equal (0, count);
         Assert.Equal (0, count);
         top.Dispose ();
         top.Dispose ();

+ 2 - 2
UnitTests/Input/EscSeqUtilsTests.cs

@@ -696,7 +696,7 @@ public class EscSeqUtilsTests
         top.Add (view);
         top.Add (view);
         Application.Begin (top);
         Application.Begin (top);
 
 
-        Application.OnMouseEvent (new() { Position = new (0, 0), Flags = 0 });
+        Application.RaiseMouseEvent (new() { Position = new (0, 0), Flags = 0 });
 
 
         ClearAll ();
         ClearAll ();
 
 
@@ -753,7 +753,7 @@ public class EscSeqUtilsTests
                                          // set Application.WantContinuousButtonPressedView to null
                                          // set Application.WantContinuousButtonPressedView to null
                                          view.WantContinuousButtonPressed = false;
                                          view.WantContinuousButtonPressed = false;
 
 
-                                         Application.OnMouseEvent (new() { Position = new (0, 0), Flags = 0 });
+                                         Application.RaiseMouseEvent (new() { Position = new (0, 0), Flags = 0 });
 
 
                                          Application.RequestStop ();
                                          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 KeyEventArgs () { Key = Key.Unknown }));
         Assert.False (r.NewKeyDownEvent (new Key { KeyCode = KeyCode.Null }));
         Assert.False (r.NewKeyDownEvent (new Key { KeyCode = KeyCode.Null }));
         Assert.False (r.NewKeyDownEvent (new Key { KeyCode = KeyCode.Null }));
         Assert.False (r.NewKeyDownEvent (new Key { KeyCode = KeyCode.Null }));
-        Assert.False (r.NewMouseEvent (new MouseEvent { Flags = MouseFlags.AllEvents }));
+        Assert.False (r.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.AllEvents }));
 
 
         var v = new View ();
         var v = new View ();
         //Assert.False (r.OnEnter (v));
         //Assert.False (r.OnEnter (v));

+ 5 - 5
UnitTests/View/Mouse/MouseEnterLeaveTests.cs

@@ -63,7 +63,7 @@ public class MouseEnterLeaveTests
             Visible = true
             Visible = true
         };
         };
 
 
-        var mouseEvent = new MouseEvent ();
+        var mouseEvent = new MouseEventArgs ();
 
 
         var eventArgs = new CancelEventArgs ();
         var eventArgs = new CancelEventArgs ();
 
 
@@ -136,7 +136,7 @@ public class MouseEnterLeaveTests
             Enabled = true, Visible = true
             Enabled = true, Visible = true
         };
         };
 
 
-        var mouseEvent = new MouseEvent ();
+        var mouseEvent = new MouseEventArgs ();
 
 
         // Act
         // Act
         view.NewMouseLeaveEvent ();
         view.NewMouseLeaveEvent ();
@@ -159,7 +159,7 @@ public class MouseEnterLeaveTests
             Visible = false
             Visible = false
         };
         };
 
 
-        var mouseEvent = new MouseEvent ();
+        var mouseEvent = new MouseEventArgs ();
 
 
         // Act
         // Act
         view.NewMouseLeaveEvent ();
         view.NewMouseLeaveEvent ();
@@ -256,7 +256,7 @@ public class MouseEnterLeaveTests
             Visible = true
             Visible = true
         };
         };
 
 
-        var mouseEvent = new MouseEvent ();
+        var mouseEvent = new MouseEventArgs ();
 
 
         // Act
         // Act
         view.NewMouseLeaveEvent ();
         view.NewMouseLeaveEvent ();
@@ -279,7 +279,7 @@ public class MouseEnterLeaveTests
             Visible = false
             Visible = false
         };
         };
 
 
-        var mouseEvent = new MouseEvent ();
+        var mouseEvent = new MouseEventArgs ();
 
 
         // Act
         // Act
         view.NewMouseLeaveEvent ();
         view.NewMouseLeaveEvent ();

+ 26 - 20
UnitTests/View/Mouse/MouseTests.cs

@@ -106,9 +106,9 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
         Application.Begin (top);
         Application.Begin (top);
 
 
         Assert.Equal (new Point (4, 4), testView.Frame.Location);
         Assert.Equal (new Point (4, 4), testView.Frame.Location);
-        Application.OnMouseEvent (new () { ScreenPosition = new (xy, xy), Flags = MouseFlags.Button1Pressed });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (xy, xy), Flags = MouseFlags.Button1Pressed });
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (xy + 1, xy + 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (xy + 1, xy + 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
 
 
         Assert.Equal (expectedMoved, new Point (5, 5) == testView.Frame.Location);
         Assert.Equal (expectedMoved, new Point (5, 5) == testView.Frame.Location);
         top.Dispose ();
         top.Dispose ();
@@ -121,9 +121,9 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
     {
     {
         MouseFlags mouseFlagsFromEvent = MouseFlags.None;
         MouseFlags mouseFlagsFromEvent = MouseFlags.None;
         var view = new View ();
         var view = new View ();
-        view.MouseEvent += (s, e) => mouseFlagsFromEvent = e.MouseEvent.Flags;
+        view.MouseEvent += (s, e) => mouseFlagsFromEvent = e.Flags;
 
 
-        view.NewMouseEvent (new MouseEvent () { Flags = mouseFlags });
+        view.NewMouseEvent (new MouseEventArgs () { Flags = mouseFlags });
         Assert.Equal (mouseFlagsFromEvent, expectedMouseFlagsFromEvent);
         Assert.Equal (mouseFlagsFromEvent, expectedMouseFlagsFromEvent);
     }
     }
 
 
@@ -142,7 +142,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
                                e.Handled = true;
                                e.Handled = true;
                            };
                            };
 
 
-        MouseEvent me = new ();
+        MouseEventArgs me = new ();
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
         Assert.True (mouseEventInvoked);
         Assert.True (mouseEventInvoked);
         Assert.True (me.Handled);
         Assert.True (me.Handled);
@@ -163,7 +163,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
         }
         }
 
 
         view.Enabled = false;
         view.Enabled = false;
-        var me = new MouseEvent ();
+        var me = new MouseEventArgs ();
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
         Assert.False (me.Handled);
         Assert.False (me.Handled);
         view.Dispose ();
         view.Dispose ();
@@ -182,7 +182,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
         }
         }
 
 
         view.Enabled = false;
         view.Enabled = false;
-        var me = new MouseEvent ()
+        var me = new MouseEventArgs ()
         {
         {
             Flags = MouseFlags.Button1Clicked
             Flags = MouseFlags.Button1Clicked
         };
         };
@@ -198,7 +198,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
     public void WantContinuousButtonPressed_False_Button_Press_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 ();
+        var me = new MouseEventArgs ();
 
 
         var view = new View ()
         var view = new View ()
         {
         {
@@ -241,7 +241,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
     [InlineData (MouseFlags.Button4Clicked)]
     [InlineData (MouseFlags.Button4Clicked)]
     public void WantContinuousButtonPressed_True_Button_Clicked_Raises_MouseClick (MouseFlags clicked)
     public void WantContinuousButtonPressed_True_Button_Clicked_Raises_MouseClick (MouseFlags clicked)
     {
     {
-        var me = new MouseEvent ();
+        var me = new MouseEventArgs ();
 
 
         var view = new View ()
         var view = new View ()
         {
         {
@@ -269,7 +269,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
     [InlineData (MouseFlags.Button4Clicked)]
     [InlineData (MouseFlags.Button4Clicked)]
     public void WantContinuousButtonPressed_True_Button_Clicked_Raises_Selecting (MouseFlags clicked)
     public void WantContinuousButtonPressed_True_Button_Clicked_Raises_Selecting (MouseFlags clicked)
     {
     {
-        var me = new MouseEvent ();
+        var me = new MouseEventArgs ();
 
 
         var view = new View ()
         var view = new View ()
         {
         {
@@ -296,7 +296,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released)]
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released)]
     public void WantContinuousButtonPressed_True_And_WantMousePositionReports_True_Button_Press_Release_Clicks (MouseFlags pressed, MouseFlags released)
     public void WantContinuousButtonPressed_True_And_WantMousePositionReports_True_Button_Press_Release_Clicks (MouseFlags pressed, MouseFlags released)
     {
     {
-        var me = new MouseEvent ();
+        var me = new MouseEventArgs ();
 
 
         var view = new View ()
         var view = new View ()
         {
         {
@@ -310,9 +310,15 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
 
 
         view.MouseClick += (s, e) => clickedCount++;
         view.MouseClick += (s, e) => clickedCount++;
 
 
+        me.Flags = pressed;
+        view.NewMouseEvent (me);
+        Assert.Equal (0, clickedCount);
+        me.Handled = false;
+
         me.Flags = pressed;
         me.Flags = pressed;
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
         Assert.Equal (1, clickedCount);
         Assert.Equal (1, clickedCount);
+        me.Handled = false;
 
 
         me.Flags = released;
         me.Flags = released;
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
@@ -328,7 +334,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
     public void WantContinuousButtonPressed_True_And_WantMousePositionReports_True_Button_Press_Release_Clicks_Repeatedly (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
     public void WantContinuousButtonPressed_True_And_WantMousePositionReports_True_Button_Press_Release_Clicks_Repeatedly (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
     {
     {
-        var me = new MouseEvent ();
+        var me = new MouseEventArgs ();
 
 
         var view = new View ()
         var view = new View ()
         {
         {
@@ -344,22 +350,22 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
 
 
         me.Flags = pressed;
         me.Flags = pressed;
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
-        Assert.Equal (1, clickedCount);
+        Assert.Equal (0, clickedCount);
         me.Handled = false;
         me.Handled = false;
 
 
         me.Flags = pressed;
         me.Flags = pressed;
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
-        Assert.Equal (2, clickedCount);
+        Assert.Equal (1, clickedCount);
         me.Handled = false;
         me.Handled = false;
 
 
         me.Flags = released;
         me.Flags = released;
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
-        Assert.Equal (2, clickedCount);
+        Assert.Equal (1, clickedCount);
         me.Handled = false;
         me.Handled = false;
 
 
         me.Flags = clicked;
         me.Flags = clicked;
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
-        Assert.Equal (2, clickedCount);
+        Assert.Equal (1, clickedCount);
 
 
         view.Dispose ();
         view.Dispose ();
         Application.ResetState (ignoreDisposed: true);
         Application.ResetState (ignoreDisposed: true);
@@ -368,7 +374,7 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
     [Fact]
     [Fact]
     public void WantContinuousButtonPressed_True_And_WantMousePositionReports_True_Move_InViewport_OutOfViewport_Keeps_Counting ()
     public void WantContinuousButtonPressed_True_And_WantMousePositionReports_True_Move_InViewport_OutOfViewport_Keeps_Counting ()
     {
     {
-        var me = new MouseEvent ();
+        var me = new MouseEventArgs ();
 
 
         var view = new View ()
         var view = new View ()
         {
         {
@@ -386,21 +392,21 @@ public class MouseTests (ITestOutputHelper output) : TestsAllViews
         me.Flags = MouseFlags.Button1Pressed;
         me.Flags = MouseFlags.Button1Pressed;
         me.Position = me.Position with { X = 0 };
         me.Position = me.Position with { X = 0 };
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
-        Assert.Equal (1, clickedCount);
+        Assert.Equal (0, clickedCount);
         me.Handled = false;
         me.Handled = false;
 
 
         // Move out of Viewport
         // Move out of Viewport
         me.Flags = MouseFlags.Button1Pressed;
         me.Flags = MouseFlags.Button1Pressed;
         me.Position = me.Position with { X = 1 };
         me.Position = me.Position with { X = 1 };
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
-        Assert.Equal (2, clickedCount);
+        Assert.Equal (1, clickedCount);
         me.Handled = false;
         me.Handled = false;
 
 
         // Move into Viewport
         // Move into Viewport
         me.Flags = MouseFlags.Button1Pressed;
         me.Flags = MouseFlags.Button1Pressed;
         me.Position = me.Position with { X = 0 };
         me.Position = me.Position with { X = 0 };
         view.NewMouseEvent (me);
         view.NewMouseEvent (me);
-        Assert.Equal (3, clickedCount);
+        Assert.Equal (2, clickedCount);
         me.Handled = false;
         me.Handled = false;
 
 
         view.Dispose ();
         view.Dispose ();

+ 5 - 5
UnitTests/Views/ButtonTests.cs

@@ -599,7 +599,7 @@ public class ButtonTests (ITestOutputHelper output)
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
     public void WantContinuousButtonPressed_True_ButtonClick_Accepts (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
     public void WantContinuousButtonPressed_True_ButtonClick_Accepts (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
     {
     {
-        var me = new MouseEvent ();
+        var me = new MouseEventArgs ();
 
 
         var button = new Button ()
         var button = new Button ()
         {
         {
@@ -618,19 +618,19 @@ public class ButtonTests (ITestOutputHelper output)
                                e.Cancel = true;
                                e.Cancel = true;
                            };
                            };
 
 
-        me = new MouseEvent ();
+        me = new MouseEventArgs ();
         me.Flags = pressed;
         me.Flags = pressed;
         button.NewMouseEvent (me);
         button.NewMouseEvent (me);
         Assert.Equal (0, selectingCount);
         Assert.Equal (0, selectingCount);
         Assert.Equal (0, acceptedCount);
         Assert.Equal (0, acceptedCount);
 
 
-        me = new MouseEvent ();
+        me = new MouseEventArgs ();
         me.Flags = released;
         me.Flags = released;
         button.NewMouseEvent (me);
         button.NewMouseEvent (me);
         Assert.Equal (0, selectingCount);
         Assert.Equal (0, selectingCount);
         Assert.Equal (0, acceptedCount);
         Assert.Equal (0, acceptedCount);
 
 
-        me = new MouseEvent ();
+        me = new MouseEventArgs ();
         me.Flags = clicked;
         me.Flags = clicked;
         button.NewMouseEvent (me);
         button.NewMouseEvent (me);
         Assert.Equal (1, selectingCount);
         Assert.Equal (1, selectingCount);
@@ -646,7 +646,7 @@ public class ButtonTests (ITestOutputHelper output)
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released)]
     [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released)]
     public void WantContinuousButtonPressed_True_ButtonPressRelease_Does_Not_Raise_Selected_Or_Accepted (MouseFlags pressed, MouseFlags released)
     public void WantContinuousButtonPressed_True_ButtonPressRelease_Does_Not_Raise_Selected_Or_Accepted (MouseFlags pressed, MouseFlags released)
     {
     {
-        var me = new MouseEvent ();
+        var me = new MouseEventArgs ();
 
 
         var button = new Button ()
         var button = new Button ()
         {
         {

+ 6 - 6
UnitTests/Views/ColorPickerTests.cs

@@ -120,7 +120,7 @@ public class ColorPickerTests
 
 
         Assert.IsAssignableFrom<IColorBar> (cp.Focused);
         Assert.IsAssignableFrom<IColorBar> (cp.Focused);
 
 
-        cp.Focused.OnMouseEvent (
+        cp.Focused.RaiseMouseEvent (
                                  new ()
                                  new ()
                                  {
                                  {
                                      Flags = MouseFlags.Button1Pressed,
                                      Flags = MouseFlags.Button1Pressed,
@@ -132,7 +132,7 @@ public class ColorPickerTests
         Assert.Equal (3, r.TrianglePosition);
         Assert.Equal (3, r.TrianglePosition);
         Assert.Equal ("#0F0000", hex.Text);
         Assert.Equal ("#0F0000", hex.Text);
 
 
-        cp.Focused.OnMouseEvent (
+        cp.Focused.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       Flags = MouseFlags.Button1Pressed,
                                       Flags = MouseFlags.Button1Pressed,
@@ -269,7 +269,7 @@ public class ColorPickerTests
         cp.Draw ();
         cp.Draw ();
 
 
         // Click at the end of the Red bar
         // Click at the end of the Red bar
-        cp.Focused.OnMouseEvent (
+        cp.Focused.RaiseMouseEvent (
                                  new ()
                                  new ()
                                  {
                                  {
                                      Flags = MouseFlags.Button1Pressed,
                                      Flags = MouseFlags.Button1Pressed,
@@ -303,7 +303,7 @@ public class ColorPickerTests
         cp.Draw ();
         cp.Draw ();
 
 
         // Click beyond the bar
         // Click beyond the bar
-        cp.Focused.OnMouseEvent (
+        cp.Focused.RaiseMouseEvent (
                                  new ()
                                  new ()
                                  {
                                  {
                                      Flags = MouseFlags.Button1Pressed,
                                      Flags = MouseFlags.Button1Pressed,
@@ -434,7 +434,7 @@ public class ColorPickerTests
         cp.Draw ();
         cp.Draw ();
 
 
         // Click on Green bar
         // Click on Green bar
-        Application.OnMouseEvent (new ()
+        Application.RaiseMouseEvent (new ()
         {
         {
             Flags = MouseFlags.Button1Pressed,
             Flags = MouseFlags.Button1Pressed,
             ScreenPosition = new (0, 1)
             ScreenPosition = new (0, 1)
@@ -453,7 +453,7 @@ public class ColorPickerTests
         Assert.IsAssignableFrom<GBar> (cp.Focused);
         Assert.IsAssignableFrom<GBar> (cp.Focused);
 
 
         // Click on Blue bar
         // Click on Blue bar
-        Application.OnMouseEvent (new ()
+        Application.RaiseMouseEvent (new ()
         {
         {
             Flags = MouseFlags.Button1Pressed,
             Flags = MouseFlags.Button1Pressed,
             ScreenPosition = new (0, 2)
             ScreenPosition = new (0, 2)

+ 27 - 27
UnitTests/Views/ComboBoxTests.cs

@@ -137,7 +137,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.Equal (-1, cb.SelectedItem);
         Assert.Equal (-1, cb.SelectedItem);
         Assert.Equal ("", cb.Text);
         Assert.Equal ("", cb.Text);
 
 
-        Assert.True (cb.NewMouseEvent (new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }));
+        Assert.True (cb.NewMouseEvent (new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }));
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
         Assert.True (cb.IsShow);
         Assert.True (cb.IsShow);
         Assert.Equal (0, cb.SelectedItem);
         Assert.Equal (0, cb.SelectedItem);
@@ -193,7 +193,7 @@ public class ComboBoxTests (ITestOutputHelper output)
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -231,7 +231,7 @@ public class ComboBoxTests (ITestOutputHelper output)
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -289,7 +289,7 @@ public class ComboBoxTests (ITestOutputHelper output)
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -300,7 +300,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (0, 1), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (0, 1), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -311,7 +311,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (0, 1), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (0, 1), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -324,7 +324,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (0, 2), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (0, 2), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("Three", selected);
         Assert.Equal ("Three", selected);
@@ -334,14 +334,14 @@ public class ComboBoxTests (ITestOutputHelper output)
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
 
 
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (0, 2), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (0, 2), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("Three", selected);
         Assert.Equal ("Three", selected);
@@ -351,7 +351,7 @@ public class ComboBoxTests (ITestOutputHelper output)
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("Three", selected);
         Assert.Equal ("Three", selected);
@@ -362,7 +362,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (0, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("One", selected);
         Assert.Equal ("One", selected);
@@ -391,14 +391,14 @@ public class ComboBoxTests (ITestOutputHelper output)
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
 
 
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -409,7 +409,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (-1, 0), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (-1, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -422,7 +422,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -433,7 +433,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (0, -1), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (0, -1), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -446,7 +446,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -457,7 +457,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Frame.Width, 0), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (cb.Frame.Width, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -470,7 +470,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -481,7 +481,7 @@ public class ComboBoxTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      cb.Subviews [1]
                      cb.Subviews [1]
                        .NewMouseEvent (
                        .NewMouseEvent (
-                                    new MouseEvent { Position = new (0, cb.Frame.Height), Flags = MouseFlags.Button1Clicked }
+                                    new MouseEventArgs { Position = new (0, cb.Frame.Height), Flags = MouseFlags.Button1Clicked }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -515,7 +515,7 @@ public class ComboBoxTests (ITestOutputHelper output)
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -673,7 +673,7 @@ Three ",
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -685,7 +685,7 @@ Three ",
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -695,7 +695,7 @@ Three ",
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -707,7 +707,7 @@ Three ",
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -736,7 +736,7 @@ Three ",
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
@@ -794,7 +794,7 @@ Three ",
 
 
         Assert.True (
         Assert.True (
                      cb.NewMouseEvent (
                      cb.NewMouseEvent (
-                                    new MouseEvent { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
+                                    new MouseEventArgs { Position = new (cb.Viewport.Right - 1, 0), Flags = MouseFlags.Button1Pressed }
                                    )
                                    )
                     );
                     );
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);

+ 21 - 21
UnitTests/Views/ContextMenuTests.cs

@@ -115,11 +115,11 @@ public class ContextMenuTests (ITestOutputHelper output)
         Assert.True (ContextMenu.IsShow);
         Assert.True (ContextMenu.IsShow);
         Assert.Equal (cm.MenuBar, Application.MouseGrabView);
         Assert.Equal (cm.MenuBar, Application.MouseGrabView);
         Assert.False (menu.IsMenuOpen);
         Assert.False (menu.IsMenuOpen);
-        Assert.False (menu.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.ReportMousePosition, View = menu }));
+        Assert.False (menu.NewMouseEvent (new MouseEventArgs { Position = new (1, 0), Flags = MouseFlags.ReportMousePosition, View = menu }));
         Assert.True (ContextMenu.IsShow);
         Assert.True (ContextMenu.IsShow);
         Assert.Equal (cm.MenuBar, Application.MouseGrabView);
         Assert.Equal (cm.MenuBar, Application.MouseGrabView);
         Assert.False (menu.IsMenuOpen);
         Assert.False (menu.IsMenuOpen);
-        Assert.True (menu.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1Clicked, View = menu }));
+        Assert.True (menu.NewMouseEvent (new MouseEventArgs { Position = new (1, 0), Flags = MouseFlags.Button1Clicked, View = menu }));
         Assert.False (ContextMenu.IsShow);
         Assert.False (ContextMenu.IsShow);
         Assert.Equal (menu, Application.MouseGrabView);
         Assert.Equal (menu, Application.MouseGrabView);
         Assert.True (menu.IsMenuOpen);
         Assert.True (menu.IsMenuOpen);
@@ -148,7 +148,7 @@ public class ContextMenuTests (ITestOutputHelper output)
                                                       output
                                                       output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new MouseEvent { ScreenPosition = new (8, 2), Flags = MouseFlags.Button3Clicked });
+        Application.RaiseMouseEvent (new MouseEventArgs { ScreenPosition = new (8, 2), Flags = MouseFlags.Button3Clicked });
 
 
         var firstIteration = false;
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
         Application.RunIteration (ref rs, ref firstIteration);
@@ -231,7 +231,7 @@ public class ContextMenuTests (ITestOutputHelper output)
                                                       output
                                                       output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new MouseEvent { ScreenPosition = new (9, 3), Flags = MouseFlags.Button3Clicked });
+        Application.RaiseMouseEvent (new MouseEventArgs { ScreenPosition = new (9, 3), Flags = MouseFlags.Button3Clicked });
 
 
         var firstIteration = false;
         var firstIteration = false;
         Application.RunIteration (ref rsDialog, ref firstIteration);
         Application.RunIteration (ref rsDialog, ref firstIteration);
@@ -287,7 +287,7 @@ public class ContextMenuTests (ITestOutputHelper output)
                                                       output
                                                       output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new MouseEvent { ScreenPosition = new (9, 3), Flags = MouseFlags.Button3Clicked });
+        Application.RaiseMouseEvent (new MouseEventArgs { ScreenPosition = new (9, 3), Flags = MouseFlags.Button3Clicked });
 
 
         var firstIteration = false;
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
         Application.RunIteration (ref rs, ref firstIteration);
@@ -532,7 +532,7 @@ public class ContextMenuTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      top.Subviews [0]
                      top.Subviews [0]
                         .NewMouseEvent (
                         .NewMouseEvent (
-                                        new MouseEvent { Position = new (0, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
+                                        new MouseEventArgs { Position = new (0, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                        )
                                        )
                     );
                     );
         Application.Refresh ();
         Application.Refresh ();
@@ -580,7 +580,7 @@ public class ContextMenuTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      top.Subviews [0]
                      top.Subviews [0]
                         .NewMouseEvent (
                         .NewMouseEvent (
-                                        new MouseEvent { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
+                                        new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                        )
                                        )
                     );
                     );
         Application.Refresh ();
         Application.Refresh ();
@@ -627,7 +627,7 @@ public class ContextMenuTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      top.Subviews [0]
                      top.Subviews [0]
                         .NewMouseEvent (
                         .NewMouseEvent (
-                                        new MouseEvent { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
+                                        new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                        )
                                        )
                     );
                     );
         Application.Refresh ();
         Application.Refresh ();
@@ -671,7 +671,7 @@ public class ContextMenuTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      top.Subviews [0]
                      top.Subviews [0]
                         .NewMouseEvent (
                         .NewMouseEvent (
-                                        new MouseEvent { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
+                                        new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                        )
                                        )
                     );
                     );
         Application.Refresh ();
         Application.Refresh ();
@@ -715,7 +715,7 @@ public class ContextMenuTests (ITestOutputHelper output)
         Assert.True (
         Assert.True (
                      top.Subviews [0]
                      top.Subviews [0]
                         .NewMouseEvent (
                         .NewMouseEvent (
-                                        new MouseEvent { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
+                                        new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.Subviews [0] }
                                        )
                                        )
                     );
                     );
         Application.Refresh ();
         Application.Refresh ();
@@ -747,7 +747,7 @@ public class ContextMenuTests (ITestOutputHelper output)
 
 
         lbl.MouseClick += (s, e) =>
         lbl.MouseClick += (s, e) =>
                           {
                           {
-                              if (e.MouseEvent.Flags == cm.MouseFlags)
+                              if (e.Flags == cm.MouseFlags)
                               {
                               {
                                   lbl.Text = "Replaced";
                                   lbl.Text = "Replaced";
                                   e.Handled = true;
                                   e.Handled = true;
@@ -758,12 +758,12 @@ public class ContextMenuTests (ITestOutputHelper output)
         top.Add (lbl);
         top.Add (lbl);
         Application.Begin (top);
         Application.Begin (top);
 
 
-        Assert.True (lbl.NewMouseEvent (new MouseEvent { Flags = cm.MouseFlags }));
+        Assert.True (lbl.NewMouseEvent (new MouseEventArgs { Flags = cm.MouseFlags }));
         Assert.Equal ("Replaced", lbl.Text);
         Assert.Equal ("Replaced", lbl.Text);
 
 
         lbl.Text = "Original";
         lbl.Text = "Original";
         cm.MouseFlags = MouseFlags.Button2Clicked;
         cm.MouseFlags = MouseFlags.Button2Clicked;
-        Assert.True (lbl.NewMouseEvent (new MouseEvent { Flags = cm.MouseFlags }));
+        Assert.True (lbl.NewMouseEvent (new MouseEventArgs { Flags = cm.MouseFlags }));
         Assert.Equal ("Replaced", lbl.Text);
         Assert.Equal ("Replaced", lbl.Text);
         top.Dispose ();
         top.Dispose ();
     }
     }
@@ -1235,7 +1235,7 @@ public class ContextMenuTests (ITestOutputHelper output)
                                                      );
                                                      );
 
 
         // X=5 is the border and so need to use at least one more
         // X=5 is the border and so need to use at least one more
-        Application.OnMouseEvent (new MouseEvent { ScreenPosition = new (6, 13), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new MouseEventArgs { ScreenPosition = new (6, 13), Flags = MouseFlags.Button1Clicked });
 
 
         var firstIteration = false;
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1253,7 +1253,7 @@ public class ContextMenuTests (ITestOutputHelper output)
                                                       output
                                                       output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new MouseEvent { ScreenPosition = new (6, 12), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new MouseEventArgs { ScreenPosition = new (6, 12), Flags = MouseFlags.Button1Clicked });
 
 
         firstIteration = false;
         firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1327,7 +1327,7 @@ public class ContextMenuTests (ITestOutputHelper output)
                                                       output
                                                       output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new MouseEvent { ScreenPosition = new (6, 13), Flags = MouseFlags.ReportMousePosition });
+        Application.RaiseMouseEvent (new MouseEventArgs { ScreenPosition = new (6, 13), Flags = MouseFlags.ReportMousePosition });
 
 
         var firstIteration = false;
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1344,7 +1344,7 @@ public class ContextMenuTests (ITestOutputHelper output)
                                                       output
                                                       output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new MouseEvent { ScreenPosition = new (6, 14), Flags = MouseFlags.ReportMousePosition });
+        Application.RaiseMouseEvent (new MouseEventArgs { ScreenPosition = new (6, 14), Flags = MouseFlags.ReportMousePosition });
 
 
         firstIteration = false;
         firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1362,7 +1362,7 @@ public class ContextMenuTests (ITestOutputHelper output)
                                                       output
                                                       output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new MouseEvent { ScreenPosition = new (6, 13), Flags = MouseFlags.ReportMousePosition });
+        Application.RaiseMouseEvent (new MouseEventArgs { ScreenPosition = new (6, 13), Flags = MouseFlags.ReportMousePosition });
 
 
         firstIteration = false;
         firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
         Application.RunIteration (ref rs, ref firstIteration);
@@ -1399,7 +1399,7 @@ public class ContextMenuTests (ITestOutputHelper output)
         Assert.Empty (Application._cachedViewsUnderMouse);
         Assert.Empty (Application._cachedViewsUnderMouse);
 
 
         // Right click on tf2 to open context menu
         // Right click on tf2 to open context menu
-        Application.OnMouseEvent (new () { ScreenPosition = new (1, 3), Flags = MouseFlags.Button3Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 3), Flags = MouseFlags.Button3Clicked });
         Assert.False (tf1.HasFocus);
         Assert.False (tf1.HasFocus);
         Assert.False (tf2.HasFocus);
         Assert.False (tf2.HasFocus);
         Assert.Equal (5, win.Subviews.Count);
         Assert.Equal (5, win.Subviews.Count);
@@ -1409,7 +1409,7 @@ public class ContextMenuTests (ITestOutputHelper output)
         Assert.Equal (tf2, Application._cachedViewsUnderMouse.LastOrDefault ());
         Assert.Equal (tf2, Application._cachedViewsUnderMouse.LastOrDefault ());
 
 
         // Click on tf1 to focus it, which cause context menu being closed
         // Click on tf1 to focus it, which cause context menu being closed
-        Application.OnMouseEvent (new () { ScreenPosition = new (1, 1), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 1), Flags = MouseFlags.Button1Clicked });
         Assert.True (tf1.HasFocus);
         Assert.True (tf1.HasFocus);
         Assert.False (tf2.HasFocus);
         Assert.False (tf2.HasFocus);
         Assert.Equal (4, win.Subviews.Count);
         Assert.Equal (4, win.Subviews.Count);
@@ -1421,7 +1421,7 @@ public class ContextMenuTests (ITestOutputHelper output)
         Assert.Equal (tf1, Application._cachedViewsUnderMouse.LastOrDefault ());
         Assert.Equal (tf1, Application._cachedViewsUnderMouse.LastOrDefault ());
 
 
         // Click on tf2 to focus it
         // Click on tf2 to focus it
-        Application.OnMouseEvent (new () { ScreenPosition = new (1, 3), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 3), Flags = MouseFlags.Button1Clicked });
         Assert.False (tf1.HasFocus);
         Assert.False (tf1.HasFocus);
         Assert.True (tf2.HasFocus);
         Assert.True (tf2.HasFocus);
         Assert.Equal (4, win.Subviews.Count);
         Assert.Equal (4, win.Subviews.Count);

+ 3 - 3
UnitTests/Views/LabelTests.cs

@@ -1364,7 +1364,7 @@ e
         Application.Top.SetFocus ();
         Application.Top.SetFocus ();
 
 
         // click on label
         // click on label
-        Application.OnMouseEvent (new () { ScreenPosition = label.Frame.Location, Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = label.Frame.Location, Flags = MouseFlags.Button1Clicked });
         Assert.False (label.HasFocus);
         Assert.False (label.HasFocus);
         Assert.True (nextView.HasFocus);
         Assert.True (nextView.HasFocus);
 
 
@@ -1442,12 +1442,12 @@ e
         Assert.True (otherView.HasFocus);
         Assert.True (otherView.HasFocus);
 
 
         // label can focus, so clicking on it set focus
         // label can focus, so clicking on it set focus
-        Application.OnMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Clicked });
         Assert.True (label.HasFocus);
         Assert.True (label.HasFocus);
         Assert.False (otherView.HasFocus);
         Assert.False (otherView.HasFocus);
 
 
         // click on view
         // click on view
-        Application.OnMouseEvent (new () { ScreenPosition = new (0, 1), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (0, 1), Flags = MouseFlags.Button1Clicked });
         Assert.False (label.HasFocus);
         Assert.False (label.HasFocus);
         Assert.True (otherView.HasFocus);
         Assert.True (otherView.HasFocus);
 
 

+ 5 - 5
UnitTests/Views/ListViewTests.cs

@@ -737,11 +737,11 @@ Item 6",
 └─────┘",
 └─────┘",
                                                       output);
                                                       output);
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Clicked });
         Assert.Equal ("", selected);
         Assert.Equal ("", selected);
         Assert.Equal (-1, lv.SelectedItem);
         Assert.Equal (-1, lv.SelectedItem);
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (1, 1), Flags = MouseFlags.Button1Clicked
                                       ScreenPosition = new (1, 1), Flags = MouseFlags.Button1Clicked
@@ -749,7 +749,7 @@ Item 6",
         Assert.Equal ("One", selected);
         Assert.Equal ("One", selected);
         Assert.Equal (0, lv.SelectedItem);
         Assert.Equal (0, lv.SelectedItem);
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (1, 2), Flags = MouseFlags.Button1Clicked
                                       ScreenPosition = new (1, 2), Flags = MouseFlags.Button1Clicked
@@ -757,7 +757,7 @@ Item 6",
         Assert.Equal ("Two", selected);
         Assert.Equal ("Two", selected);
         Assert.Equal (1, lv.SelectedItem);
         Assert.Equal (1, lv.SelectedItem);
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (1, 3), Flags = MouseFlags.Button1Clicked
                                       ScreenPosition = new (1, 3), Flags = MouseFlags.Button1Clicked
@@ -765,7 +765,7 @@ Item 6",
         Assert.Equal ("Three", selected);
         Assert.Equal ("Three", selected);
         Assert.Equal (2, lv.SelectedItem);
         Assert.Equal (2, lv.SelectedItem);
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (1, 4), Flags = MouseFlags.Button1Clicked
                                       ScreenPosition = new (1, 4), Flags = MouseFlags.Button1Clicked

+ 5 - 5
UnitTests/Views/MenuBarTests.cs

@@ -243,7 +243,7 @@ public class MenuBarTests (ITestOutputHelper output)
         top.Add (menu, btn);
         top.Add (menu, btn);
         Application.Begin (top);
         Application.Begin (top);
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (0, 4), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (0, 4), Flags = MouseFlags.Button1Clicked });
         Assert.True (btnClicked);
         Assert.True (btnClicked);
         top.Dispose ();
         top.Dispose ();
     }
     }
@@ -613,7 +613,7 @@ public class MenuBarTests (ITestOutputHelper output)
                                                       output
                                                       output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (20, 5), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (20, 5), Flags = MouseFlags.Button1Clicked });
 
 
         firstIteration = false;
         firstIteration = false;
 
 
@@ -646,7 +646,7 @@ public class MenuBarTests (ITestOutputHelper output)
         {
         {
             menu.OpenMenu ();
             menu.OpenMenu ();
 
 
-            Application.OnMouseEvent (new () { ScreenPosition = new (20, 5 + i), Flags = MouseFlags.Button1Clicked });
+            Application.RaiseMouseEvent (new () { ScreenPosition = new (20, 5 + i), Flags = MouseFlags.Button1Clicked });
 
 
             firstIteration = false;
             firstIteration = false;
             Application.RunIteration (ref rsDialog, ref firstIteration);
             Application.RunIteration (ref rsDialog, ref firstIteration);
@@ -809,7 +809,7 @@ public class MenuBarTests (ITestOutputHelper output)
                                                       output
                                                       output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (20, 5), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (20, 5), Flags = MouseFlags.Button1Clicked });
 
 
         firstIteration = false;
         firstIteration = false;
 
 
@@ -831,7 +831,7 @@ public class MenuBarTests (ITestOutputHelper output)
         {
         {
             menu.OpenMenu ();
             menu.OpenMenu ();
 
 
-            Application.OnMouseEvent (new () { ScreenPosition = new (20, 5 + i), Flags = MouseFlags.Button1Clicked });
+            Application.RaiseMouseEvent (new () { ScreenPosition = new (20, 5 + i), Flags = MouseFlags.Button1Clicked });
 
 
             firstIteration = false;
             firstIteration = false;
             Application.RunIteration (ref rs, ref firstIteration);
             Application.RunIteration (ref rs, ref firstIteration);

+ 2 - 2
UnitTests/Views/ScrollBarViewTests.cs

@@ -1176,7 +1176,7 @@ This is a test             ",
                                                       _output
                                                       _output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new MouseEvent { Position = new (15, 0), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new MouseEventArgs { Position = new (15, 0), Flags = MouseFlags.Button1Clicked });
 
 
         Assert.Null (Application.MouseGrabView);
         Assert.Null (Application.MouseGrabView);
         Assert.True (clicked);
         Assert.True (clicked);
@@ -1200,7 +1200,7 @@ This is a test             ",
                                                       _output
                                                       _output
                                                      );
                                                      );
 
 
-        Application.OnMouseEvent (new MouseEvent { Position = new (15, 0), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new MouseEventArgs { Position = new (15, 0), Flags = MouseFlags.Button1Clicked });
 
 
         Assert.Null (Application.MouseGrabView);
         Assert.Null (Application.MouseGrabView);
         Assert.True (clicked);
         Assert.True (clicked);

+ 4 - 4
UnitTests/Views/ShortcutTests.cs

@@ -424,7 +424,7 @@ public class ShortcutTests
         var accepted = 0;
         var accepted = 0;
         shortcut.Accepting += (s, e) => accepted++;
         shortcut.Accepting += (s, e) => accepted++;
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (x, 0),
                                       ScreenPosition = new (x, 0),
@@ -484,7 +484,7 @@ public class ShortcutTests
         Application.Top.SetRelativeLayout (new (100, 100));
         Application.Top.SetRelativeLayout (new (100, 100));
         Application.Top.LayoutSubviews ();
         Application.Top.LayoutSubviews ();
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (mouseX, 0),
                                       ScreenPosition = new (mouseX, 0),
@@ -541,7 +541,7 @@ public class ShortcutTests
         var accepted = 0;
         var accepted = 0;
         shortcut.Accepting += (s, e) => { accepted++; };
         shortcut.Accepting += (s, e) => { accepted++; };
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (mouseX, 0),
                                       ScreenPosition = new (mouseX, 0),
@@ -616,7 +616,7 @@ public class ShortcutTests
                                  e.Cancel = true;
                                  e.Cancel = true;
                              };
                              };
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (mouseX, 0),
                                       ScreenPosition = new (mouseX, 0),

+ 12 - 12
UnitTests/Views/TabViewTests.cs

@@ -138,27 +138,27 @@ public class TabViewTests (ITestOutputHelper output)
         top.Add (tv);
         top.Add (tv);
         Application.Begin (top);
         Application.Begin (top);
 
 
-        MouseEvent args;
+        MouseEventArgs args;
 
 
         // Waving mouse around does not trigger click
         // Waving mouse around does not trigger click
         for (var i = 0; i < 100; i++)
         for (var i = 0; i < 100; i++)
         {
         {
             args = new () { ScreenPosition = new (i, 1), Flags = MouseFlags.ReportMousePosition };
             args = new () { ScreenPosition = new (i, 1), Flags = MouseFlags.ReportMousePosition };
-            Application.OnMouseEvent (args);
+            Application.RaiseMouseEvent (args);
             Application.Refresh ();
             Application.Refresh ();
             Assert.Null (clicked);
             Assert.Null (clicked);
             Assert.Equal (tab1, tv.SelectedTab);
             Assert.Equal (tab1, tv.SelectedTab);
         }
         }
 
 
         args = new () { ScreenPosition = new (3, 1), Flags = MouseFlags.Button1Clicked };
         args = new () { ScreenPosition = new (3, 1), Flags = MouseFlags.Button1Clicked };
-        Application.OnMouseEvent (args);
+        Application.RaiseMouseEvent (args);
         Application.Refresh ();
         Application.Refresh ();
         Assert.Equal (tab1, clicked);
         Assert.Equal (tab1, clicked);
         Assert.Equal (tab1, tv.SelectedTab);
         Assert.Equal (tab1, tv.SelectedTab);
 
 
         // Click to tab2
         // Click to tab2
         args = new () { ScreenPosition = new (6, 1), Flags = MouseFlags.Button1Clicked };
         args = new () { ScreenPosition = new (6, 1), Flags = MouseFlags.Button1Clicked };
-        Application.OnMouseEvent (args);
+        Application.RaiseMouseEvent (args);
         Application.Refresh ();
         Application.Refresh ();
         Assert.Equal (tab2, clicked);
         Assert.Equal (tab2, clicked);
         Assert.Equal (tab2, tv.SelectedTab);
         Assert.Equal (tab2, tv.SelectedTab);
@@ -171,7 +171,7 @@ public class TabViewTests (ITestOutputHelper output)
                          };
                          };
 
 
         args = new () { ScreenPosition = new (3, 1), Flags = MouseFlags.Button1Clicked };
         args = new () { ScreenPosition = new (3, 1), Flags = MouseFlags.Button1Clicked };
-        Application.OnMouseEvent (args);
+        Application.RaiseMouseEvent (args);
         Application.Refresh ();
         Application.Refresh ();
 
 
         // Tab 1 was clicked but event handler blocked navigation
         // Tab 1 was clicked but event handler blocked navigation
@@ -179,7 +179,7 @@ public class TabViewTests (ITestOutputHelper output)
         Assert.Equal (tab2, tv.SelectedTab);
         Assert.Equal (tab2, tv.SelectedTab);
 
 
         args = new () { ScreenPosition = new (12, 1), Flags = MouseFlags.Button1Clicked };
         args = new () { ScreenPosition = new (12, 1), Flags = MouseFlags.Button1Clicked };
-        Application.OnMouseEvent (args);
+        Application.RaiseMouseEvent (args);
         Application.Refresh ();
         Application.Refresh ();
 
 
         // Clicking beyond last tab should raise event with null Tab
         // Clicking beyond last tab should raise event with null Tab
@@ -233,8 +233,8 @@ public class TabViewTests (ITestOutputHelper output)
         Application.Begin (top);
         Application.Begin (top);
 
 
         // Click the right arrow
         // Click the right arrow
-        var args = new MouseEvent { ScreenPosition = new (6, 2), Flags = MouseFlags.Button1Clicked };
-        Application.OnMouseEvent (args);
+        var args = new MouseEventArgs { ScreenPosition = new (6, 2), Flags = MouseFlags.Button1Clicked };
+        Application.RaiseMouseEvent (args);
         Application.Refresh ();
         Application.Refresh ();
         Assert.Null (clicked);
         Assert.Null (clicked);
         Assert.Equal (tab1, oldChanged);
         Assert.Equal (tab1, oldChanged);
@@ -254,7 +254,7 @@ public class TabViewTests (ITestOutputHelper output)
 
 
         // Click the left arrow
         // Click the left arrow
         args = new () { ScreenPosition = new (0, 2), Flags = MouseFlags.Button1Clicked };
         args = new () { ScreenPosition = new (0, 2), Flags = MouseFlags.Button1Clicked };
-        Application.OnMouseEvent (args);
+        Application.RaiseMouseEvent (args);
         Application.Refresh ();
         Application.Refresh ();
         Assert.Null (clicked);
         Assert.Null (clicked);
         Assert.Equal (tab2, oldChanged);
         Assert.Equal (tab2, oldChanged);
@@ -324,8 +324,8 @@ public class TabViewTests (ITestOutputHelper output)
         Application.Begin (top);
         Application.Begin (top);
 
 
         // Click the right arrow
         // Click the right arrow
-        var args = new MouseEvent { ScreenPosition = new (7, 3), Flags = MouseFlags.Button1Clicked };
-        Application.OnMouseEvent (args);
+        var args = new MouseEventArgs { ScreenPosition = new (7, 3), Flags = MouseFlags.Button1Clicked };
+        Application.RaiseMouseEvent (args);
         Application.Refresh ();
         Application.Refresh ();
         Assert.Null (clicked);
         Assert.Null (clicked);
         Assert.Equal (tab1, oldChanged);
         Assert.Equal (tab1, oldChanged);
@@ -347,7 +347,7 @@ public class TabViewTests (ITestOutputHelper output)
 
 
         // Click the left arrow
         // Click the left arrow
         args = new () { ScreenPosition = new (1, 3), Flags = MouseFlags.Button1Clicked };
         args = new () { ScreenPosition = new (1, 3), Flags = MouseFlags.Button1Clicked };
-        Application.OnMouseEvent (args);
+        Application.RaiseMouseEvent (args);
         Application.Refresh ();
         Application.Refresh ();
         Assert.Null (clicked);
         Assert.Null (clicked);
         Assert.Equal (tab2, oldChanged);
         Assert.Equal (tab2, oldChanged);

+ 6 - 6
UnitTests/Views/TextFieldTests.cs

@@ -1178,15 +1178,15 @@ public class TextFieldTests (ITestOutputHelper output)
         top.Add (tf);
         top.Add (tf);
         Application.Begin (top);
         Application.Begin (top);
 
 
-        var mouseEvent = new MouseEvent { Flags = MouseFlags.Button1Clicked, View = tf };
+        var mouseEvent = new MouseEventArgs { Flags = MouseFlags.Button1Clicked, View = tf };
 
 
-        Application.OnMouseEvent (mouseEvent);
+        Application.RaiseMouseEvent (mouseEvent);
         Assert.Equal (1, clickCounter);
         Assert.Equal (1, clickCounter);
 
 
         // Get a fresh instance that represents a right click.
         // Get a fresh instance that represents a right click.
         // Should be ignored because of SuppressRightClick callback
         // Should be ignored because of SuppressRightClick callback
         mouseEvent = new () { Flags = MouseFlags.Button3Clicked, View = tf };
         mouseEvent = new () { Flags = MouseFlags.Button3Clicked, View = tf };
-        Application.OnMouseEvent (mouseEvent);
+        Application.RaiseMouseEvent (mouseEvent);
         Assert.Equal (1, clickCounter);
         Assert.Equal (1, clickCounter);
 
 
         Application.MouseEvent -= HandleRightClick;
         Application.MouseEvent -= HandleRightClick;
@@ -1199,13 +1199,13 @@ public class TextFieldTests (ITestOutputHelper output)
         // This call causes the context menu to pop, and MouseEvent() returns true.
         // This call causes the context menu to pop, and MouseEvent() returns true.
         // Thus, the clickCounter is NOT incremented.
         // Thus, the clickCounter is NOT incremented.
         // Which is correct, because the user did NOT click with the left mouse button.
         // Which is correct, because the user did NOT click with the left mouse button.
-        Application.OnMouseEvent (mouseEvent);
+        Application.RaiseMouseEvent (mouseEvent);
         Assert.Equal (1, clickCounter);
         Assert.Equal (1, clickCounter);
         top.Dispose ();
         top.Dispose ();
 
 
         return;
         return;
 
 
-        void HandleRightClick (object sender, MouseEvent arg)
+        void HandleRightClick (object sender, MouseEventArgs arg)
         {
         {
             if (arg.Flags.HasFlag (MouseFlags.Button3Clicked))
             if (arg.Flags.HasFlag (MouseFlags.Button3Clicked))
             {
             {
@@ -1293,7 +1293,7 @@ public class TextFieldTests (ITestOutputHelper output)
     {
     {
         var tf = new TextField { Width = 10, Text = " " };
         var tf = new TextField { Width = 10, Text = " " };
 
 
-        var ev = new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1DoubleClicked };
+        var ev = new MouseEventArgs { Position = new (0, 0), Flags = MouseFlags.Button1DoubleClicked };
 
 
         tf.NewMouseEvent (ev);
         tf.NewMouseEvent (ev);
         Assert.Equal (1, tf.SelectedLength);
         Assert.Equal (1, tf.SelectedLength);

+ 1 - 1
UnitTests/Views/TextValidateFieldTests.cs

@@ -322,7 +322,7 @@ public class TextValidateField_NET_Provider_Tests
         Assert.False (field.IsValid);
         Assert.False (field.IsValid);
         Assert.Equal ("--(1   )--", field.Provider.Text);
         Assert.Equal ("--(1   )--", field.Provider.Text);
 
 
-        field.NewMouseEvent (new MouseEvent { Position = new (25, 0), Flags = MouseFlags.Button1Pressed });
+        field.NewMouseEvent (new MouseEventArgs { Position = new (25, 0), Flags = MouseFlags.Button1Pressed });
 
 
         field.NewKeyDownEvent (Key.D1);
         field.NewKeyDownEvent (Key.D1);
 
 

+ 17 - 17
UnitTests/Views/TextViewTests.cs

@@ -130,7 +130,7 @@ public class TextViewTests
         Assert.False (fv.CanFocus);
         Assert.False (fv.CanFocus);
         Assert.False (fv.HasFocus);
         Assert.False (fv.HasFocus);
 
 
-        tv.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
+        tv.NewMouseEvent (new MouseEventArgs { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
 
 
         Assert.Empty (tv.SelectedText);
         Assert.Empty (tv.SelectedText);
         Assert.False (tv.CanFocus);
         Assert.False (tv.CanFocus);
@@ -140,7 +140,7 @@ public class TextViewTests
 
 
         fv.CanFocus = true;
         fv.CanFocus = true;
         tv.CanFocus = true;
         tv.CanFocus = true;
-        tv.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
+        tv.NewMouseEvent (new MouseEventArgs { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
 
 
         Assert.Equal ("some ", tv.SelectedText);
         Assert.Equal ("some ", tv.SelectedText);
         Assert.True (tv.CanFocus);
         Assert.True (tv.CanFocus);
@@ -149,7 +149,7 @@ public class TextViewTests
         Assert.True (fv.HasFocus);
         Assert.True (fv.HasFocus);
 
 
         fv.CanFocus = false;
         fv.CanFocus = false;
-        tv.NewMouseEvent (new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
+        tv.NewMouseEvent (new MouseEventArgs { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
 
 
         Assert.Equal ("some ", tv.SelectedText); // Setting CanFocus to false don't change the SelectedText
         Assert.Equal ("some ", tv.SelectedText); // Setting CanFocus to false don't change the SelectedText
         Assert.True (tv.CanFocus); // v2: CanFocus is not longer automatically changed
         Assert.True (tv.CanFocus); // v2: CanFocus is not longer automatically changed
@@ -1025,7 +1025,7 @@ This is the second line.
 
 
         for (var i = 0; i < 12; i++)
         for (var i = 0; i < 12; i++)
         {
         {
-            tv.NewMouseEvent (new MouseEvent { Flags = MouseFlags.WheeledRight });
+            tv.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.WheeledRight });
             Assert.Equal (Math.Min (i + 1, 11), tv.LeftColumn);
             Assert.Equal (Math.Min (i + 1, 11), tv.LeftColumn);
             Application.PositionCursor ();
             Application.PositionCursor ();
             Application.Driver!.GetCursorVisibility (out CursorVisibility cursorVisibility);
             Application.Driver!.GetCursorVisibility (out CursorVisibility cursorVisibility);
@@ -1034,7 +1034,7 @@ This is the second line.
 
 
         for (var i = 11; i > 0; i--)
         for (var i = 11; i > 0; i--)
         {
         {
-            tv.NewMouseEvent (new MouseEvent { Flags = MouseFlags.WheeledLeft });
+            tv.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.WheeledLeft });
             Assert.Equal (i - 1, tv.LeftColumn);
             Assert.Equal (i - 1, tv.LeftColumn);
 
 
             Application.PositionCursor ();
             Application.PositionCursor ();
@@ -1077,7 +1077,7 @@ This is the second line.
 
 
         for (var i = 0; i < 12; i++)
         for (var i = 0; i < 12; i++)
         {
         {
-            tv.NewMouseEvent (new MouseEvent { Flags = MouseFlags.WheeledDown });
+            tv.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.WheeledDown });
             Application.PositionCursor ();
             Application.PositionCursor ();
             Assert.Equal (i + 1, tv.TopRow);
             Assert.Equal (i + 1, tv.TopRow);
             Application.Driver!.GetCursorVisibility (out CursorVisibility cursorVisibility);
             Application.Driver!.GetCursorVisibility (out CursorVisibility cursorVisibility);
@@ -1086,7 +1086,7 @@ This is the second line.
 
 
         for (var i = 12; i > 0; i--)
         for (var i = 12; i > 0; i--)
         {
         {
-            tv.NewMouseEvent (new MouseEvent { Flags = MouseFlags.WheeledUp });
+            tv.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.WheeledUp });
             Application.PositionCursor ();
             Application.PositionCursor ();
             Assert.Equal (i - 1, tv.TopRow);
             Assert.Equal (i - 1, tv.TopRow);
 
 
@@ -6166,7 +6166,7 @@ This is the second line.
 
 
         Assert.True (
         Assert.True (
                      _textView.NewMouseEvent (
                      _textView.NewMouseEvent (
-                                           new MouseEvent { Position = new (12, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
+                                           new MouseEventArgs { Position = new (12, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
                                           )
                                           )
                     );
                     );
         Assert.Equal (0, _textView.SelectionStartColumn);
         Assert.Equal (0, _textView.SelectionStartColumn);
@@ -6175,7 +6175,7 @@ This is the second line.
         Assert.True (_textView.IsSelecting);
         Assert.True (_textView.IsSelecting);
         Assert.Equal ("TAB to jump ", _textView.SelectedText);
         Assert.Equal ("TAB to jump ", _textView.SelectedText);
 
 
-        Assert.True (_textView.NewMouseEvent (new MouseEvent { Position = new (12, 0), Flags = MouseFlags.Button1Clicked }));
+        Assert.True (_textView.NewMouseEvent (new MouseEventArgs { Position = new (12, 0), Flags = MouseFlags.Button1Clicked }));
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (new Point (12, 0), _textView.CursorPosition);
         Assert.Equal (new Point (12, 0), _textView.CursorPosition);
@@ -6184,7 +6184,7 @@ This is the second line.
 
 
         Assert.True (
         Assert.True (
                      _textView.NewMouseEvent (
                      _textView.NewMouseEvent (
-                                           new MouseEvent { Position = new (19, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
+                                           new MouseEventArgs { Position = new (19, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
                                           )
                                           )
                     );
                     );
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
@@ -6193,7 +6193,7 @@ This is the second line.
         Assert.True (_textView.IsSelecting);
         Assert.True (_textView.IsSelecting);
         Assert.Equal ("TAB to jump between", _textView.SelectedText);
         Assert.Equal ("TAB to jump between", _textView.SelectedText);
 
 
-        Assert.True (_textView.NewMouseEvent (new MouseEvent { Position = new (19, 0), Flags = MouseFlags.Button1Clicked }));
+        Assert.True (_textView.NewMouseEvent (new MouseEventArgs { Position = new (19, 0), Flags = MouseFlags.Button1Clicked }));
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (new Point (19, 0), _textView.CursorPosition);
         Assert.Equal (new Point (19, 0), _textView.CursorPosition);
@@ -6202,7 +6202,7 @@ This is the second line.
 
 
         Assert.True (
         Assert.True (
                      _textView.NewMouseEvent (
                      _textView.NewMouseEvent (
-                                           new MouseEvent { Position = new (24, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
+                                           new MouseEventArgs { Position = new (24, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
                                           )
                                           )
                     );
                     );
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
@@ -6211,14 +6211,14 @@ This is the second line.
         Assert.True (_textView.IsSelecting);
         Assert.True (_textView.IsSelecting);
         Assert.Equal ("TAB to jump between text", _textView.SelectedText);
         Assert.Equal ("TAB to jump between text", _textView.SelectedText);
 
 
-        Assert.True (_textView.NewMouseEvent (new MouseEvent { Position = new (24, 0), Flags = MouseFlags.Button1Clicked }));
+        Assert.True (_textView.NewMouseEvent (new MouseEventArgs { Position = new (24, 0), Flags = MouseFlags.Button1Clicked }));
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (new Point (24, 0), _textView.CursorPosition);
         Assert.Equal (new Point (24, 0), _textView.CursorPosition);
         Assert.True (_textView.IsSelecting);
         Assert.True (_textView.IsSelecting);
         Assert.Equal ("TAB to jump between text", _textView.SelectedText);
         Assert.Equal ("TAB to jump between text", _textView.SelectedText);
 
 
-        Assert.True (_textView.NewMouseEvent (new MouseEvent { Position = new (24, 0), Flags = MouseFlags.Button1Pressed }));
+        Assert.True (_textView.NewMouseEvent (new MouseEventArgs { Position = new (24, 0), Flags = MouseFlags.Button1Pressed }));
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (0, _textView.SelectionStartRow);
         Assert.Equal (new Point (24, 0), _textView.CursorPosition);
         Assert.Equal (new Point (24, 0), _textView.CursorPosition);
@@ -6972,12 +6972,12 @@ TAB to jump between text field",
     {
     {
         var tv = new TextView { Width = 10, Text = " " };
         var tv = new TextView { Width = 10, Text = " " };
 
 
-        var ev = new MouseEvent { Position = new (0, 0), Flags = MouseFlags.Button1DoubleClicked };
+        var ev = new MouseEventArgs { Position = new (0, 0), Flags = MouseFlags.Button1DoubleClicked };
 
 
         tv.NewMouseEvent (ev);
         tv.NewMouseEvent (ev);
         Assert.Equal (1, tv.SelectedLength);
         Assert.Equal (1, tv.SelectedLength);
 
 
-        ev = new MouseEvent { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked };
+        ev = new MouseEventArgs { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked };
 
 
         tv.NewMouseEvent (ev);
         tv.NewMouseEvent (ev);
         Assert.Equal (1, tv.SelectedLength);
         Assert.Equal (1, tv.SelectedLength);
@@ -7094,7 +7094,7 @@ line.
                                                       _output
                                                       _output
                                                      );
                                                      );
 
 
-        Assert.True (tv.NewMouseEvent (new MouseEvent { Position = new (0, 3), Flags = MouseFlags.Button1Pressed }));
+        Assert.True (tv.NewMouseEvent (new MouseEventArgs { Position = new (0, 3), Flags = MouseFlags.Button1Pressed }));
         tv.Draw ();
         tv.Draw ();
         Assert.Equal (new Point (0, 3), tv.CursorPosition);
         Assert.Equal (new Point (0, 3), tv.CursorPosition);
         Assert.Equal (new Point (13, 0), cp);
         Assert.Equal (new Point (13, 0), cp);

+ 22 - 22
UnitTests/Views/ToplevelTests.cs

@@ -440,7 +440,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
                                          Assert.Null (Application.MouseGrabView);
                                          Assert.Null (Application.MouseGrabView);
 
 
                                          // Grab the mouse
                                          // Grab the mouse
-                                         Application.OnMouseEvent (new () { ScreenPosition = new (3, 2), Flags = MouseFlags.Button1Pressed });
+                                         Application.RaiseMouseEvent (new () { ScreenPosition = new (3, 2), Flags = MouseFlags.Button1Pressed });
 
 
                                          Assert.Equal (Application.Top!.Border, Application.MouseGrabView);
                                          Assert.Equal (Application.Top!.Border, Application.MouseGrabView);
                                          Assert.Equal (new (2, 2, 10, 3), Application.Top.Frame);
                                          Assert.Equal (new (2, 2, 10, 3), Application.Top.Frame);
@@ -450,7 +450,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
                                          Assert.Equal (Application.Top!.Border, Application.MouseGrabView);
                                          Assert.Equal (Application.Top!.Border, Application.MouseGrabView);
 
 
                                          // Drag to left
                                          // Drag to left
-                                         Application.OnMouseEvent (
+                                         Application.RaiseMouseEvent (
                                                                    new ()
                                                                    new ()
                                                                    {
                                                                    {
                                                                        ScreenPosition = new (2, 2), Flags = MouseFlags.Button1Pressed
                                                                        ScreenPosition = new (2, 2), Flags = MouseFlags.Button1Pressed
@@ -473,7 +473,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
                                          Assert.Equal (Application.Top!.Border, Application.MouseGrabView);
                                          Assert.Equal (Application.Top!.Border, Application.MouseGrabView);
 
 
                                          // Drag up
                                          // Drag up
-                                         Application.OnMouseEvent (
+                                         Application.RaiseMouseEvent (
                                                                    new ()
                                                                    new ()
                                                                    {
                                                                    {
                                                                        ScreenPosition = new (2, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
                                                                        ScreenPosition = new (2, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
@@ -496,7 +496,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
                                          Assert.Equal (Application.Top!.Border, Application.MouseGrabView);
                                          Assert.Equal (Application.Top!.Border, Application.MouseGrabView);
 
 
                                          // Ungrab the mouse
                                          // Ungrab the mouse
-                                         Application.OnMouseEvent (new () { ScreenPosition = new (2, 1), Flags = MouseFlags.Button1Released });
+                                         Application.RaiseMouseEvent (new () { ScreenPosition = new (2, 1), Flags = MouseFlags.Button1Released });
                                          Application.Refresh ();
                                          Application.Refresh ();
 
 
                                          Assert.Null (Application.MouseGrabView);
                                          Assert.Null (Application.MouseGrabView);
@@ -545,7 +545,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
                                          Assert.Null (Application.MouseGrabView);
                                          Assert.Null (Application.MouseGrabView);
 
 
                                          // Grab the mouse
                                          // Grab the mouse
-                                         Application.OnMouseEvent (
+                                         Application.RaiseMouseEvent (
                                                                    new ()
                                                                    new ()
                                                                    {
                                                                    {
                                                                        ScreenPosition = new (win.Frame.X, win.Frame.Y), Flags = MouseFlags.Button1Pressed
                                                                        ScreenPosition = new (win.Frame.X, win.Frame.Y), Flags = MouseFlags.Button1Pressed
@@ -561,7 +561,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
                                          movex = 1;
                                          movex = 1;
                                          movey = 0;
                                          movey = 0;
 
 
-                                         Application.OnMouseEvent (
+                                         Application.RaiseMouseEvent (
                                                                    new ()
                                                                    new ()
                                                                    {
                                                                    {
                                                                        ScreenPosition = new (win.Frame.X + movex, win.Frame.Y + movey), Flags =
                                                                        ScreenPosition = new (win.Frame.X + movex, win.Frame.Y + movey), Flags =
@@ -586,7 +586,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
                                          movex = 0;
                                          movex = 0;
                                          movey = -1;
                                          movey = -1;
 
 
-                                         Application.OnMouseEvent (
+                                         Application.RaiseMouseEvent (
                                                                    new ()
                                                                    new ()
                                                                    {
                                                                    {
                                                                        ScreenPosition = new (win.Frame.X + movex, win.Frame.Y + movey), Flags =
                                                                        ScreenPosition = new (win.Frame.X + movex, win.Frame.Y + movey), Flags =
@@ -611,7 +611,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
                                          movex = 0;
                                          movex = 0;
                                          movey = 0;
                                          movey = 0;
 
 
-                                         Application.OnMouseEvent (
+                                         Application.RaiseMouseEvent (
                                                                    new ()
                                                                    new ()
                                                                    {
                                                                    {
                                                                        ScreenPosition = new (win.Frame.X + movex, win.Frame.Y + movey),
                                                                        ScreenPosition = new (win.Frame.X + movex, win.Frame.Y + movey),
@@ -743,18 +743,18 @@ public partial class ToplevelTests (ITestOutputHelper output)
         Assert.Equal (new (0, 0, 200, 100), scrollView.Subviews [0].Frame);
         Assert.Equal (new (0, 0, 200, 100), scrollView.Subviews [0].Frame);
         Assert.Equal (new (3, 3, 194, 94), win.Frame);
         Assert.Equal (new (3, 3, 194, 94), win.Frame);
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (6, 6), Flags = MouseFlags.Button1Pressed });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (6, 6), Flags = MouseFlags.Button1Pressed });
         Assert.Equal (win.Border, Application.MouseGrabView);
         Assert.Equal (win.Border, Application.MouseGrabView);
         Assert.Equal (new (3, 3, 194, 94), win.Frame);
         Assert.Equal (new (3, 3, 194, 94), win.Frame);
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (9, 9), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (9, 9), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition });
         Assert.Equal (win.Border, Application.MouseGrabView);
         Assert.Equal (win.Border, Application.MouseGrabView);
         top.SetNeedsLayout ();
         top.SetNeedsLayout ();
         top.LayoutSubviews ();
         top.LayoutSubviews ();
         Assert.Equal (new (6, 6, 191, 91), win.Frame);
         Assert.Equal (new (6, 6, 191, 91), win.Frame);
         Application.Refresh ();
         Application.Refresh ();
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (5, 5), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
                                       ScreenPosition = new (5, 5), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
@@ -765,12 +765,12 @@ public partial class ToplevelTests (ITestOutputHelper output)
         Assert.Equal (new (2, 2, 195, 95), win.Frame);
         Assert.Equal (new (2, 2, 195, 95), win.Frame);
         Application.Refresh ();
         Application.Refresh ();
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (5, 5), Flags = MouseFlags.Button1Released });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (5, 5), Flags = MouseFlags.Button1Released });
 
 
         // ScrollView always grab the mouse when the container's subview OnMouseEnter don't want grab the mouse
         // ScrollView always grab the mouse when the container's subview OnMouseEnter don't want grab the mouse
         Assert.Equal (scrollView, Application.MouseGrabView);
         Assert.Equal (scrollView, Application.MouseGrabView);
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (4, 4), Flags = MouseFlags.ReportMousePosition });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (4, 4), Flags = MouseFlags.ReportMousePosition });
         Assert.Equal (scrollView, Application.MouseGrabView);
         Assert.Equal (scrollView, Application.MouseGrabView);
         top.Dispose ();
         top.Dispose ();
     }
     }
@@ -790,11 +790,11 @@ public partial class ToplevelTests (ITestOutputHelper output)
 
 
         Assert.Null (Application.MouseGrabView);
         Assert.Null (Application.MouseGrabView);
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Pressed });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Pressed });
 
 
         Assert.Equal (window.Border, Application.MouseGrabView);
         Assert.Equal (window.Border, Application.MouseGrabView);
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (-11, -4), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
                                       ScreenPosition = new (-11, -4), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
@@ -807,7 +807,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
         // Changes Top size to same size as Dialog more menu and scroll bar
         // Changes Top size to same size as Dialog more menu and scroll bar
         ((FakeDriver)Application.Driver!).SetBufferSize (20, 3);
         ((FakeDriver)Application.Driver!).SetBufferSize (20, 3);
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (-1, -1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
                                       ScreenPosition = new (-1, -1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
@@ -820,7 +820,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
         // Changes Top size smaller than Dialog size
         // Changes Top size smaller than Dialog size
         ((FakeDriver)Application.Driver!).SetBufferSize (19, 2);
         ((FakeDriver)Application.Driver!).SetBufferSize (19, 2);
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (-1, -1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
                                       ScreenPosition = new (-1, -1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
@@ -830,7 +830,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
         Assert.Equal (new (0, 0, 19, 2), top.Frame);
         Assert.Equal (new (0, 0, 19, 2), top.Frame);
         Assert.Equal (new (-1, -1, 20, 3), window.Frame);
         Assert.Equal (new (-1, -1, 20, 3), window.Frame);
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (18, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
                                       ScreenPosition = new (18, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
@@ -841,7 +841,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
         Assert.Equal (new (18, 1, 20, 3), window.Frame);
         Assert.Equal (new (18, 1, 20, 3), window.Frame);
 
 
         // On a real app we can't go beyond the SuperView bounds
         // On a real app we can't go beyond the SuperView bounds
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (19, 2), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
                                       ScreenPosition = new (19, 2), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
@@ -882,7 +882,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
         Assert.Null (Application.MouseGrabView);
         Assert.Null (Application.MouseGrabView);
         Assert.Equal (new (0, 0, 10, 3), window.Frame);
         Assert.Equal (new (0, 0, 10, 3), window.Frame);
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Pressed });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (0, 0), Flags = MouseFlags.Button1Pressed });
 
 
         var firstIteration = false;
         var firstIteration = false;
         Application.RunIteration (ref rs, ref firstIteration);
         Application.RunIteration (ref rs, ref firstIteration);
@@ -890,7 +890,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
 
 
         Assert.Equal (new (0, 0, 10, 3), window.Frame);
         Assert.Equal (new (0, 0, 10, 3), window.Frame);
 
 
-        Application.OnMouseEvent (
+        Application.RaiseMouseEvent (
                                   new ()
                                   new ()
                                   {
                                   {
                                       ScreenPosition = new (1, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
                                       ScreenPosition = new (1, 1), Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
@@ -984,7 +984,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
 
 
         Assert.Equal (new (2, 1, 15, 10), testWindow.Frame);
         Assert.Equal (new (2, 1, 15, 10), testWindow.Frame);
 
 
-        Application.OnMouseEvent (new () { ScreenPosition = new (5, 2), Flags = MouseFlags.Button1Clicked });
+        Application.RaiseMouseEvent (new () { ScreenPosition = new (5, 2), Flags = MouseFlags.Button1Clicked });
 
 
         Application.Refresh ();
         Application.Refresh ();
 
 

+ 4 - 4
UnitTests/Views/TreeTableSourceTests.cs

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

+ 4 - 4
UnitTests/Views/TreeViewTests.cs

@@ -438,7 +438,7 @@ public class TreeViewTests
         Assert.False (called);
         Assert.False (called);
 
 
         // double click triggers activation
         // double click triggers activation
-        tree.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1DoubleClicked });
+        tree.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.Button1DoubleClicked });
 
 
         Assert.True (called);
         Assert.True (called);
         Assert.Same (f, activated);
         Assert.Same (f, activated);
@@ -467,12 +467,12 @@ public class TreeViewTests
         Assert.False (called);
         Assert.False (called);
 
 
         // double click does nothing because we changed button binding to right click
         // double click does nothing because we changed button binding to right click
-        tree.NewMouseEvent (new MouseEvent { Position = new (0, 1), Flags = MouseFlags.Button1DoubleClicked });
+        tree.NewMouseEvent (new MouseEventArgs { Position = new (0, 1), Flags = MouseFlags.Button1DoubleClicked });
 
 
         Assert.Null (activated);
         Assert.Null (activated);
         Assert.False (called);
         Assert.False (called);
 
 
-        tree.NewMouseEvent (new MouseEvent { Position = new (0, 1), Flags = MouseFlags.Button2Clicked });
+        tree.NewMouseEvent (new MouseEventArgs { Position = new (0, 1), Flags = MouseFlags.Button2Clicked });
 
 
         Assert.True (called);
         Assert.True (called);
         Assert.Same (car1, activated);
         Assert.Same (car1, activated);
@@ -506,7 +506,7 @@ public class TreeViewTests
 
 
 
 
         // double click does nothing because we changed button to null
         // double click does nothing because we changed button to null
-        tree.NewMouseEvent (new MouseEvent { Flags = MouseFlags.Button1DoubleClicked });
+        tree.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.Button1DoubleClicked });
 
 
         Assert.False (called);
         Assert.False (called);
         Assert.Null (activated);
         Assert.Null (activated);

+ 2 - 2
docfx/docs/migratingfromv1.md

@@ -196,7 +196,7 @@ In v1, the `Command` enum had duplicate entries and inconsistent naming. In v2 i
 
 
 The API for mouse input is now internally consistent and easier to use.
 The API for mouse input is now internally consistent and easier to use.
 
 
-* The @Terminal.Gui.MouseEvent class replaces `MouseEventEventArgs`.
+* The @Terminal.Gui.MouseEventArgs class replaces `MouseEventEventArgs`.
 * More granular APIs are provided to ease handling specific mouse actions. See [Mouse API](mouse.md).
 * More granular APIs are provided to ease handling specific mouse actions. See [Mouse API](mouse.md).
 * Views can use the @Terminal.Gui.View.Highlight event to have the view be visibly highlighted on various mouse events.
 * Views can use the @Terminal.Gui.View.Highlight event to have the view be visibly highlighted on various mouse events.
 * Views can set `View.WantContinousButtonPresses = true` to have their @Terminal.Gui.Command.Accept command be invoked repeatedly as the user holds a mouse button down on the view.
 * Views can set `View.WantContinousButtonPresses = true` to have their @Terminal.Gui.Command.Accept command be invoked repeatedly as the user holds a mouse button down on the view.
@@ -213,7 +213,7 @@ The API for mouse input is now internally consistent and easier to use.
 
 
 ```diff
 ```diff
 - Application.RootMouseEvent(KeyEvent arg)
 - Application.RootMouseEvent(KeyEvent arg)
-+ Application.MouseEvent(object? sender, MouseEvent mouseEvent)
++ Application.MouseEvent(object? sender, MouseEventArgs mouseEvent)
 ```
 ```
 
 
 ## Navigation - `Cursor`, `Focus`, `TabStop` etc... 
 ## Navigation - `Cursor`, `Focus`, `TabStop` etc... 

+ 2 - 2
docfx/docs/mouse.md

@@ -10,9 +10,9 @@ Tenets higher in the list have precedence over tenets lower in the list.
 
 
 ## Mouse APIs
 ## Mouse APIs
 
 
-At the core of *Terminal.Gui*'s mouse API is the *[MouseEvent](~/api/Terminal.Gui.MouseEvent.yml)* class. The `MouseEvent` class provides a platform-independent abstraction for common mouse events. Every mouse event can be fully described in a `MouseEvent` instance, and most of the mouse-related APIs are simply helper functions for decoding a `MouseEvent`.
+At the core of *Terminal.Gui*'s mouse API is the @Terminal.Gui.MouseEventArgs class. The @Terminal.Gui.MouseEventArgs class provides a platform-independent abstraction for common mouse events. Every mouse event can be fully described in a @Terminal.Gui.MouseEventArgs instance, and most of the mouse-related APIs are simply helper functions for decoding a @Terminal.Gui.MouseEventArgs.
 
 
-When the user does something with the mouse, the `ConsoleDriver` maps the platform-specific mouse event into a `MouseEvent` and calls `Application.OnMouseEvent`. Then, `Application.OnMouseEvent` determines which `View` the event should go to. The `View.OnMouseEvent` method can be overridden or the `View.MouseEvent` event can be subscribed to, to handle the low-level mouse event. If the low-level event is not handled by a view, `Application` will then call the appropriate high-level helper APIs. For example, if the user double-clicks the mouse, `View.OnMouseClick` will be called/`View.MouseClick` will be fired with the event arguments indicating which mouse button was double-clicked. 
+When the user does something with the mouse, the `ConsoleDriver` maps the platform-specific mouse event into a `MouseEventArgs` and calls `Application.RaiseMouseEvent`. Then, `Application.RaiseMouseEvent` determines which `View` the event should go to. The `View.OnMouseEvent` method can be overridden or the `View.MouseEvent` event can be subscribed to, to handle the low-level mouse event. If the low-level event is not handled by a view, `Application` will then call the appropriate high-level helper APIs. For example, if the user double-clicks the mouse, `View.OnMouseClick` will be called/`View.MouseClick` will be raised with the event arguments indicating which mouse button was double-clicked. 
 
 
 ## Mouse Button and Movement Concepts
 ## Mouse Button and Movement Concepts