···1414 /// Receives the final mouse position from an <see cref="InputManager"/>.
1515 /// </summary>
1616 /// <param name="position">The final mouse position.</param>
1717- void FeedbackMousePositionChange(Vector2 position);
1717+ /// <param name="isSelfFeedback">Whether the feedback was triggered from this handler.</param>
1818+ void FeedbackMousePositionChange(Vector2 position, bool isSelfFeedback);
1819 }
1920}
···101101 return true;
102102 }
103103104104- public void FeedbackMousePositionChange(Vector2 position)
104104+ public void FeedbackMousePositionChange(Vector2 position, bool isSelfFeedback)
105105 {
106106 if (!Enabled.Value)
107107 return;
108108+109109+ if (!isSelfFeedback)
110110+ // if another handler has updated the cursor position, handle updating the OS cursor so we can seamlessly revert
111111+ // to mouse control at any point.
112112+ window.UpdateMousePosition(position);
108113109114 if (window.RelativeMouseMode)
110115 {
+1-1
osu.Framework/Input/InputManager.cs
···808808 foreach (var h in InputHandlers)
809809 {
810810 if (h.Enabled.Value && h is INeedsMousePositionFeedback handler)
811811- handler.FeedbackMousePositionChange(mouse.Position);
811811+ handler.FeedbackMousePositionChange(mouse.Position, h == mouseSource);
812812 }
813813814814 handleMouseMove(state, e.LastPosition);