Browse Source

Rename PointerLeave to PointerExited

pull/8396/head
robloo 4 years ago
parent
commit
0863a05c76
  1. 2
      src/Avalonia.Base/Input/IInputElement.cs
  2. 28
      src/Avalonia.Base/Input/InputElement.cs
  3. 4
      src/Avalonia.Base/Input/PointerOverPreProcessor.cs
  4. 12
      src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs
  5. 4
      src/Avalonia.Controls.DataGrid/DataGridCell.cs
  6. 4
      src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
  7. 4
      src/Avalonia.Controls.DataGrid/DataGridRow.cs
  8. 4
      src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
  9. 4
      src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs
  10. 34
      src/Avalonia.Controls/MenuItem.cs
  11. 6
      src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
  12. 4
      src/Avalonia.Controls/Primitives/ScrollBar.cs
  13. 6
      src/Avalonia.Controls/ToolTipService.cs
  14. 2
      src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs
  15. 14
      tests/Avalonia.Base.UnitTests/Input/PointerOverTests.cs
  16. 4
      tests/Avalonia.Controls.UnitTests/ButtonTests.cs
  17. 34
      tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs
  18. 2
      tests/Avalonia.UnitTests/MouseTestHelper.cs

2
src/Avalonia.Base/Input/IInputElement.cs

@ -47,7 +47,7 @@ namespace Avalonia.Input
/// <summary>
/// Occurs when the pointer leaves the control.
/// </summary>
event EventHandler<PointerEventArgs>? PointerLeave;
event EventHandler<PointerEventArgs>? PointerExited;
/// <summary>
/// Occurs when the pointer is pressed over the control.

28
src/Avalonia.Base/Input/InputElement.cs

@ -136,11 +136,11 @@ namespace Avalonia.Input
RoutingStrategies.Direct);
/// <summary>
/// Defines the <see cref="PointerLeave"/> event.
/// Defines the <see cref="PointerExited"/> event.
/// </summary>
public static readonly RoutedEvent<PointerEventArgs> PointerLeaveEvent =
public static readonly RoutedEvent<PointerEventArgs> PointerExitedEvent =
RoutedEvent.Register<InputElement, PointerEventArgs>(
nameof(PointerLeave),
nameof(PointerExited),
RoutingStrategies.Direct);
/// <summary>
@ -212,8 +212,8 @@ namespace Avalonia.Input
KeyDownEvent.AddClassHandler<InputElement>((x, e) => x.OnKeyDown(e));
KeyUpEvent.AddClassHandler<InputElement>((x, e) => x.OnKeyUp(e));
TextInputEvent.AddClassHandler<InputElement>((x, e) => x.OnTextInput(e));
PointerEnteredEvent.AddClassHandler<InputElement>((x, e) => x.OnPointerEnterCore(e));
PointerLeaveEvent.AddClassHandler<InputElement>((x, e) => x.OnPointerLeaveCore(e));
PointerEnteredEvent.AddClassHandler<InputElement>((x, e) => x.OnPointerEnteredCore(e));
PointerExitedEvent.AddClassHandler<InputElement>((x, e) => x.OnPointerExitedCore(e));
PointerMovedEvent.AddClassHandler<InputElement>((x, e) => x.OnPointerMoved(e));
PointerPressedEvent.AddClassHandler<InputElement>((x, e) => x.OnPointerPressed(e));
PointerReleasedEvent.AddClassHandler<InputElement>((x, e) => x.OnPointerReleased(e));
@ -292,10 +292,10 @@ namespace Avalonia.Input
/// <summary>
/// Occurs when the pointer leaves the control.
/// </summary>
public event EventHandler<PointerEventArgs>? PointerLeave
public event EventHandler<PointerEventArgs>? PointerExited
{
add { AddHandler(PointerLeaveEvent, value); }
remove { RemoveHandler(PointerLeaveEvent, value); }
add { AddHandler(PointerExitedEvent, value); }
remove { RemoveHandler(PointerExitedEvent, value); }
}
/// <summary>
@ -551,10 +551,10 @@ namespace Avalonia.Input
}
/// <summary>
/// Called before the <see cref="PointerLeave"/> event occurs.
/// Called before the <see cref="PointerExited"/> event occurs.
/// </summary>
/// <param name="e">The event args.</param>
protected virtual void OnPointerLeave(PointerEventArgs e)
protected virtual void OnPointerExited(PointerEventArgs e)
{
}
@ -647,20 +647,20 @@ namespace Avalonia.Input
/// Called before the <see cref="PointerEntered"/> event occurs.
/// </summary>
/// <param name="e">The event args.</param>
private void OnPointerEnterCore(PointerEventArgs e)
private void OnPointerEnteredCore(PointerEventArgs e)
{
IsPointerOver = true;
OnPointerEntered(e);
}
/// <summary>
/// Called before the <see cref="PointerLeave"/> event occurs.
/// Called before the <see cref="PointerExited"/> event occurs.
/// </summary>
/// <param name="e">The event args.</param>
private void OnPointerLeaveCore(PointerEventArgs e)
private void OnPointerExitedCore(PointerEventArgs e)
{
IsPointerOver = false;
OnPointerLeave(e);
OnPointerExited(e);
}
/// <summary>

4
src/Avalonia.Base/Input/PointerOverPreProcessor.cs

@ -97,7 +97,7 @@ namespace Avalonia.Input
// Do not pass rootVisual, when we have unknown (negative) position,
// so GetPosition won't return invalid values.
var hasPosition = position.X >= 0 && position.Y >= 0;
var e = new PointerEventArgs(InputElement.PointerLeaveEvent, element, pointer,
var e = new PointerEventArgs(InputElement.PointerExitedEvent, element, pointer,
hasPosition ? root : null, hasPosition ? position : default,
timestamp, properties, inputModifiers);
@ -177,7 +177,7 @@ namespace Avalonia.Input
el = root.PointerOverElement;
var e = new PointerEventArgs(InputElement.PointerLeaveEvent, el, pointer, root, position,
var e = new PointerEventArgs(InputElement.PointerExitedEvent, el, pointer, root, position,
timestamp, properties, inputModifiers);
if (el != null && branch != null && !el.IsAttachedToVisualTree)
{

12
src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs

@ -129,7 +129,7 @@ namespace Avalonia.Controls.Primitives
if (_inputTarget != null)
{
_inputTarget.PointerEntered += InputTarget_PointerEntered;
_inputTarget.PointerLeave += InputTarget_PointerLeave;
_inputTarget.PointerExited += InputTarget_PointerExited;
_inputTarget.PointerPressed += InputTarget_PointerPressed;
_inputTarget.PointerMoved += InputTarget_PointerMoved;
_inputTarget.PointerReleased += InputTarget_PointerReleased;
@ -195,7 +195,7 @@ namespace Avalonia.Controls.Primitives
if (_inputTarget != null)
{
_inputTarget.PointerEntered -= InputTarget_PointerEntered;
_inputTarget.PointerLeave -= InputTarget_PointerLeave;
_inputTarget.PointerExited -= InputTarget_PointerExited;
_inputTarget.PointerPressed -= InputTarget_PointerPressed;
_inputTarget.PointerMoved -= InputTarget_PointerMoved;
_inputTarget.PointerReleased -= InputTarget_PointerReleased;
@ -362,7 +362,7 @@ namespace Avalonia.Controls.Primitives
}
/// <inheritdoc/>
protected override void OnPointerLeave(PointerEventArgs e)
protected override void OnPointerExited(PointerEventArgs e)
{
// We only want to bother with the color name tool tip if we can provide color names.
if (_selectionEllipsePanel != null &&
@ -373,7 +373,7 @@ namespace Avalonia.Controls.Primitives
UpdatePseudoClasses();
base.OnPointerLeave(e);
base.OnPointerExited(e);
}
/// <inheritdoc/>
@ -856,8 +856,8 @@ namespace Avalonia.Controls.Primitives
args.Handled = true;
}
/// <inheritdoc cref="InputElement.PointerLeave"/>
private void InputTarget_PointerLeave(object? sender, PointerEventArgs args)
/// <inheritdoc cref="InputElement.PointerExited"/>
private void InputTarget_PointerExited(object? sender, PointerEventArgs args)
{
_isPointerOver = false;
UpdatePseudoClasses();

4
src/Avalonia.Controls.DataGrid/DataGridCell.cs

@ -148,9 +148,9 @@ namespace Avalonia.Controls
IsMouseOver = true;
}
}
protected override void OnPointerLeave(PointerEventArgs e)
protected override void OnPointerExited(PointerEventArgs e)
{
base.OnPointerLeave(e);
base.OnPointerExited(e);
if (OwningRow != null)
{

4
src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs

@ -85,7 +85,7 @@ namespace Avalonia.Controls
PointerReleased += DataGridColumnHeader_PointerReleased;
PointerMoved += DataGridColumnHeader_PointerMoved;
PointerEntered += DataGridColumnHeader_PointerEntered;
PointerLeave += DataGridColumnHeader_PointerLeave;
PointerExited += DataGridColumnHeader_PointerExited;
}
private void OnAreSeparatorsVisibleChanged(AvaloniaPropertyChangedEventArgs e)
@ -464,7 +464,7 @@ namespace Avalonia.Controls
UpdatePseudoClasses();
}
private void DataGridColumnHeader_PointerLeave(object sender, PointerEventArgs e)
private void DataGridColumnHeader_PointerExited(object sender, PointerEventArgs e)
{
if (!IsEnabled)
{

4
src/Avalonia.Controls.DataGrid/DataGridRow.cs

@ -612,10 +612,10 @@ namespace Avalonia.Controls
base.OnPointerEntered(e);
IsMouseOver = true;
}
protected override void OnPointerLeave(PointerEventArgs e)
protected override void OnPointerExited(PointerEventArgs e)
{
IsMouseOver = false;
base.OnPointerLeave(e);
base.OnPointerExited(e);
}
internal void ApplyCellsState()

4
src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs

@ -386,7 +386,7 @@ namespace Avalonia.Controls
base.OnPointerEntered(e);
}
protected override void OnPointerLeave(PointerEventArgs e)
protected override void OnPointerExited(PointerEventArgs e)
{
if (IsEnabled)
{
@ -394,7 +394,7 @@ namespace Avalonia.Controls
UpdatePseudoClasses();
}
base.OnPointerLeave(e);
base.OnPointerExited(e);
}
private void SetIsCheckedNoCallBack(bool value)

4
src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs

@ -167,14 +167,14 @@ namespace Avalonia.Controls.Primitives
base.OnPointerEntered(e);
}
protected override void OnPointerLeave(PointerEventArgs e)
protected override void OnPointerExited(PointerEventArgs e)
{
if (OwningRow != null)
{
OwningRow.IsMouseOver = false;
}
base.OnPointerLeave(e);
base.OnPointerExited(e);
}
//TODO TabStop

34
src/Avalonia.Controls/MenuItem.cs

@ -79,25 +79,33 @@ namespace Avalonia.Controls
/// Defines the <see cref="Click"/> event.
/// </summary>
public static readonly RoutedEvent<RoutedEventArgs> ClickEvent =
RoutedEvent.Register<MenuItem, RoutedEventArgs>(nameof(Click), RoutingStrategies.Bubble);
RoutedEvent.Register<MenuItem, RoutedEventArgs>(
nameof(Click),
RoutingStrategies.Bubble);
/// <summary>
/// Defines the <see cref="PointerEnteredItem"/> event.
/// </summary>
public static readonly RoutedEvent<PointerEventArgs> PointerEnteredItemEvent =
RoutedEvent.Register<MenuItem, PointerEventArgs>(nameof(PointerEnteredItem), RoutingStrategies.Bubble);
RoutedEvent.Register<MenuItem, PointerEventArgs>(
nameof(PointerEnteredItem),
RoutingStrategies.Bubble);
/// <summary>
/// Defines the <see cref="PointerLeaveItem"/> event.
/// Defines the <see cref="PointerExitedItem"/> event.
/// </summary>
public static readonly RoutedEvent<PointerEventArgs> PointerLeaveItemEvent =
RoutedEvent.Register<MenuItem, PointerEventArgs>(nameof(PointerLeaveItem), RoutingStrategies.Bubble);
public static readonly RoutedEvent<PointerEventArgs> PointerExitedItemEvent =
RoutedEvent.Register<MenuItem, PointerEventArgs>(
nameof(PointerExitedItem),
RoutingStrategies.Bubble);
/// <summary>
/// Defines the <see cref="SubmenuOpened"/> event.
/// </summary>
public static readonly RoutedEvent<RoutedEventArgs> SubmenuOpenedEvent =
RoutedEvent.Register<MenuItem, RoutedEventArgs>(nameof(SubmenuOpened), RoutingStrategies.Bubble);
RoutedEvent.Register<MenuItem, RoutedEventArgs>(
nameof(SubmenuOpened),
RoutingStrategies.Bubble);
/// <summary>
/// The default value for the <see cref="ItemsControl.ItemsPanel"/> property.
@ -186,12 +194,12 @@ namespace Avalonia.Controls
/// Raised when the pointer leaves a menu item.
/// </summary>
/// <remarks>
/// A bubbling version of the <see cref="InputElement.PointerLeave"/> event for menu items.
/// A bubbling version of the <see cref="InputElement.PointerExited"/> event for menu items.
/// </remarks>
public event EventHandler<PointerEventArgs>? PointerLeaveItem
public event EventHandler<PointerEventArgs>? PointerExitedItem
{
add { AddHandler(PointerLeaveItemEvent, value); }
remove { RemoveHandler(PointerLeaveItemEvent, value); }
add { AddHandler(PointerExitedItemEvent, value); }
remove { RemoveHandler(PointerExitedItemEvent, value); }
}
/// <summary>
@ -447,12 +455,12 @@ namespace Avalonia.Controls
}
/// <inheritdoc/>
protected override void OnPointerLeave(PointerEventArgs e)
protected override void OnPointerExited(PointerEventArgs e)
{
base.OnPointerLeave(e);
base.OnPointerExited(e);
var point = e.GetCurrentPoint(null);
RaiseEvent(new PointerEventArgs(PointerLeaveItemEvent, this, e.Pointer, this.VisualRoot, point.Position,
RaiseEvent(new PointerEventArgs(PointerExitedItemEvent, this, e.Pointer, this.VisualRoot, point.Position,
e.Timestamp, point.Properties, e.KeyModifiers));
}

6
src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs

@ -55,7 +55,7 @@ namespace Avalonia.Controls.Platform
Menu.AddHandler(AccessKeyHandler.AccessKeyPressedEvent, AccessKeyPressed);
Menu.AddHandler(Avalonia.Controls.Menu.MenuOpenedEvent, MenuOpened);
Menu.AddHandler(MenuItem.PointerEnteredItemEvent, PointerEntered);
Menu.AddHandler(MenuItem.PointerLeaveItemEvent, PointerLeave);
Menu.AddHandler(MenuItem.PointerExitedItemEvent, PointerExited);
Menu.AddHandler(InputElement.PointerMovedEvent, PointerMoved);
_root = Menu.VisualRoot;
@ -91,7 +91,7 @@ namespace Avalonia.Controls.Platform
Menu.RemoveHandler(AccessKeyHandler.AccessKeyPressedEvent, AccessKeyPressed);
Menu.RemoveHandler(Avalonia.Controls.Menu.MenuOpenedEvent, MenuOpened);
Menu.RemoveHandler(MenuItem.PointerEnteredItemEvent, PointerEntered);
Menu.RemoveHandler(MenuItem.PointerLeaveItemEvent, PointerLeave);
Menu.RemoveHandler(MenuItem.PointerExitedItemEvent, PointerExited);
Menu.RemoveHandler(InputElement.PointerMovedEvent, PointerMoved);
if (_root is InputElement inputRoot)
@ -358,7 +358,7 @@ namespace Avalonia.Controls.Platform
}
}
protected internal virtual void PointerLeave(object? sender, PointerEventArgs e)
protected internal virtual void PointerExited(object? sender, PointerEventArgs e)
{
var item = GetMenuItem(e.Source as IControl);

4
src/Avalonia.Controls/Primitives/ScrollBar.cs

@ -228,9 +228,9 @@ namespace Avalonia.Controls.Primitives
}
}
protected override void OnPointerLeave(PointerEventArgs e)
protected override void OnPointerExited(PointerEventArgs e)
{
base.OnPointerLeave(e);
base.OnPointerExited(e);
if (AllowAutoHide)
{

6
src/Avalonia.Controls/ToolTipService.cs

@ -27,13 +27,13 @@ namespace Avalonia.Controls
if (e.OldValue != null)
{
control.PointerEntered -= ControlPointerEntered;
control.PointerLeave -= ControlPointerLeave;
control.PointerExited -= ControlPointerExited;
}
if (e.NewValue != null)
{
control.PointerEntered += ControlPointerEntered;
control.PointerLeave += ControlPointerLeave;
control.PointerExited += ControlPointerExited;
}
if (ToolTip.GetIsOpen(control) && e.NewValue != e.OldValue && !(e.NewValue is ToolTip))
@ -101,7 +101,7 @@ namespace Avalonia.Controls
/// </summary>
/// <param name="sender">The event sender.</param>
/// <param name="e">The event args.</param>
private void ControlPointerLeave(object? sender, PointerEventArgs e)
private void ControlPointerExited(object? sender, PointerEventArgs e)
{
var control = (Control)sender!;
Close(control);

2
src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs

@ -122,7 +122,7 @@ namespace Avalonia.Diagnostics.Views
if (header != null)
{
header.PointerEntered += AddAdorner;
header.PointerLeave += RemoveAdorner;
header.PointerExited += RemoveAdorner;
}
item.TemplateApplied -= TreeViewItemTemplateApplied;

14
tests/Avalonia.Base.UnitTests/Input/PointerOverTests.cs

@ -248,7 +248,7 @@ namespace Avalonia.Base.UnitTests.Input
{
((object?)decorator, nameof(InputElement.PointerEntered)),
(decorator, nameof(InputElement.PointerMoved)),
(decorator, nameof(InputElement.PointerLeave)),
(decorator, nameof(InputElement.PointerExited)),
(canvas, nameof(InputElement.PointerEntered)),
(canvas, nameof(InputElement.PointerMoved))
},
@ -297,7 +297,7 @@ namespace Avalonia.Base.UnitTests.Input
Assert.Equal(
new[]
{
((object?)canvas, nameof(InputElement.PointerLeave)),
((object?)canvas, nameof(InputElement.PointerExited)),
(decorator, nameof(InputElement.PointerEntered)),
(border, nameof(InputElement.PointerEntered)),
},
@ -344,8 +344,8 @@ namespace Avalonia.Base.UnitTests.Input
{
((object?)canvas, nameof(InputElement.PointerEntered), expectedPosition),
(root, nameof(InputElement.PointerEntered), expectedPosition),
(canvas, nameof(InputElement.PointerLeave), expectedPosition),
(root, nameof(InputElement.PointerLeave), expectedPosition)
(canvas, nameof(InputElement.PointerExited), expectedPosition),
(root, nameof(InputElement.PointerExited), expectedPosition)
},
result);
}
@ -431,8 +431,8 @@ namespace Avalonia.Base.UnitTests.Input
{
((object?)canvas, nameof(InputElement.PointerEntered), lastClientPosition),
(root, nameof(InputElement.PointerEntered), lastClientPosition),
(canvas, nameof(InputElement.PointerLeave), lastClientPosition),
(root, nameof(InputElement.PointerLeave), lastClientPosition),
(canvas, nameof(InputElement.PointerExited), lastClientPosition),
(root, nameof(InputElement.PointerExited), lastClientPosition),
},
result);
}
@ -444,7 +444,7 @@ namespace Avalonia.Base.UnitTests.Input
foreach (var c in controls)
{
c.PointerEntered += handler;
c.PointerLeave += handler;
c.PointerExited += handler;
c.PointerMoved += handler;
}
}

4
tests/Avalonia.Controls.UnitTests/ButtonTests.cs

@ -185,7 +185,7 @@ namespace Avalonia.Controls.UnitTests
RaisePointerEntered(target);
RaisePointerMove(target, new Point(50,50));
RaisePointerPressed(target, 1, MouseButton.Left, new Point(50, 50));
RaisePointerLeave(target);
RaisePointerExited(target);
Assert.Equal(_helper.Captured, target);
@ -427,7 +427,7 @@ namespace Avalonia.Controls.UnitTests
_helper.Enter(button);
}
private void RaisePointerLeave(Button button)
private void RaisePointerExited(Button button)
{
_helper.Leave(button);
}

34
tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs

@ -202,31 +202,31 @@ namespace Avalonia.Controls.UnitTests.Platform
}
[Fact]
public void PointerLeave_Deselects_Item_When_Menu_Not_Open()
public void PointerExited_Deselects_Item_When_Menu_Not_Open()
{
var target = new DefaultMenuInteractionHandler(false);
var menu = new Mock<IMenu>();
var item = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.Parent == menu.Object);
var e = CreateArgs(MenuItem.PointerLeaveItemEvent, item);
var e = CreateArgs(MenuItem.PointerExitedItemEvent, item);
menu.SetupGet(x => x.SelectedItem).Returns(item);
target.PointerLeave(item, e);
target.PointerExited(item, e);
menu.VerifySet(x => x.SelectedItem = null);
Assert.False(e.Handled);
}
[Fact]
public void PointerLeave_Doesnt_Deselect_Item_When_Menu_Open()
public void PointerExited_Doesnt_Deselect_Item_When_Menu_Open()
{
var target = new DefaultMenuInteractionHandler(false);
var menu = new Mock<IMenu>();
var item = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.Parent == menu.Object);
var e = CreateArgs(MenuItem.PointerLeaveItemEvent, item);
var e = CreateArgs(MenuItem.PointerExitedItemEvent, item);
menu.SetupGet(x => x.IsOpen).Returns(true);
menu.SetupGet(x => x.SelectedItem).Returns(item);
target.PointerLeave(item, e);
target.PointerExited(item, e);
menu.VerifySet(x => x.SelectedItem = null, Times.Never);
Assert.False(e.Handled);
@ -438,48 +438,48 @@ namespace Avalonia.Controls.UnitTests.Platform
}
[Fact]
public void PointerLeave_Deselects_Item()
public void PointerExited_Deselects_Item()
{
var target = new DefaultMenuInteractionHandler(false);
var menu = Mock.Of<IMenu>();
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu);
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem);
var e = CreateArgs(MenuItem.PointerLeaveItemEvent, item);
var e = CreateArgs(MenuItem.PointerExitedItemEvent, item);
Mock.Get(parentItem).SetupGet(x => x.SelectedItem).Returns(item);
target.PointerLeave(item, e);
target.PointerExited(item, e);
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = null);
Assert.False(e.Handled);
}
[Fact]
public void PointerLeave_Doesnt_Deselect_Sibling()
public void PointerExited_Doesnt_Deselect_Sibling()
{
var target = new DefaultMenuInteractionHandler(false);
var menu = Mock.Of<IMenu>();
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu);
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem);
var sibling = Mock.Of<IMenuItem>(x => x.Parent == parentItem);
var e = CreateArgs(MenuItem.PointerLeaveItemEvent, item);
var e = CreateArgs(MenuItem.PointerExitedItemEvent, item);
Mock.Get(parentItem).SetupGet(x => x.SelectedItem).Returns(sibling);
target.PointerLeave(item, e);
target.PointerExited(item, e);
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = null, Times.Never);
Assert.False(e.Handled);
}
[Fact]
public void PointerLeave_Doesnt_Deselect_Item_If_Pointer_Over_Submenu()
public void PointerExited_Doesnt_Deselect_Item_If_Pointer_Over_Submenu()
{
var target = new DefaultMenuInteractionHandler(false);
var menu = Mock.Of<IMenu>();
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu);
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true && x.IsPointerOverSubMenu == true);
var e = CreateArgs(MenuItem.PointerLeaveItemEvent, item);
var e = CreateArgs(MenuItem.PointerExitedItemEvent, item);
target.PointerLeave(item, e);
target.PointerExited(item, e);
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = null, Times.Never);
Assert.False(e.Handled);
@ -511,7 +511,7 @@ namespace Avalonia.Controls.UnitTests.Platform
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true);
var childItem = Mock.Of<IMenuItem>(x => x.Parent == item);
var enter = CreateArgs(MenuItem.PointerEnteredItemEvent, item);
var leave = CreateArgs(MenuItem.PointerLeaveItemEvent, item);
var leave = CreateArgs(MenuItem.PointerExitedItemEvent, item);
// Pointer enters item; item is selected.
target.PointerEntered(item, enter);
@ -526,7 +526,7 @@ namespace Avalonia.Controls.UnitTests.Platform
Mock.Get(item).Invocations.Clear();
// Pointer briefly exits item, but submenu remains open.
target.PointerLeave(item, leave);
target.PointerExited(item, leave);
Mock.Get(item).Verify(x => x.Close(), Times.Never);
Mock.Get(item).Invocations.Clear();

2
tests/Avalonia.UnitTests/MouseTestHelper.cs

@ -113,7 +113,7 @@ namespace Avalonia.UnitTests
public void Leave(IInteractive target)
{
target.RaiseEvent(new PointerEventArgs(InputElement.PointerLeaveEvent, target, _pointer, (IVisual)target, default,
target.RaiseEvent(new PointerEventArgs(InputElement.PointerExitedEvent, target, _pointer, (IVisual)target, default,
Timestamp(), new PointerPointProperties((RawInputModifiers)_pressedButtons, PointerUpdateKind.Other), KeyModifiers.None));
}

Loading…
Cancel
Save