diff --git a/osu.Game.Tests/Visual/Editing/TestSceneComposeSelectBox.cs b/osu.Game.Tests/Visual/Editing/TestSceneComposeSelectBox.cs
index e383aa8008..d5cfeb1878 100644
--- a/osu.Game.Tests/Visual/Editing/TestSceneComposeSelectBox.cs
+++ b/osu.Game.Tests/Visual/Editing/TestSceneComposeSelectBox.cs
@@ -167,5 +167,21 @@ namespace osu.Game.Tests.Visual.Editing
AddStep("move mouse away", () => InputManager.MoveMouseTo(selectionBox, new Vector2(20)));
AddUntilStep("rotation handle hidden", () => rotationHandle.Alpha == 0);
}
+
+ ///
+ /// Tests that hovering over two handles instantaneously from one to another does not crash or cause issues to the visibility state.
+ ///
+ [Test]
+ public void TestHoverOverTwoHandlesInstantaneously()
+ {
+ AddStep("hover over top-left scale handle", () =>
+ InputManager.MoveMouseTo(this.ChildrenOfType().Single(s => s.Anchor == Anchor.TopLeft)));
+ AddStep("hover over top-right scale handle", () =>
+ InputManager.MoveMouseTo(this.ChildrenOfType().Single(s => s.Anchor == Anchor.TopRight)));
+ AddUntilStep("top-left rotation handle hidden", () =>
+ this.ChildrenOfType().Single(r => r.Anchor == Anchor.TopLeft).Alpha == 0);
+ AddUntilStep("top-right rotation handle shown", () =>
+ this.ChildrenOfType().Single(r => r.Anchor == Anchor.TopRight).Alpha == 1);
+ }
}
}
diff --git a/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs b/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs
index 456f72878d..397158b9f6 100644
--- a/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs
+++ b/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs
@@ -84,8 +84,8 @@ namespace osu.Game.Screens.Edit.Compose.Components
if (activeHandle?.IsHeld == true)
return;
- activeHandle = rotationHandles.SingleOrDefault(h => h.IsHeld || h.IsHovered);
- activeHandle ??= allDragHandles.SingleOrDefault(h => h.IsHovered);
+ activeHandle = rotationHandles.FirstOrDefault(h => h.IsHeld || h.IsHovered);
+ activeHandle ??= allDragHandles.FirstOrDefault(h => h.IsHovered);
if (activeHandle != null)
{