diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/MouseHoverLogic.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/MouseHoverLogic.cs index 1f6f79d745..25d025b249 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/MouseHoverLogic.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/MouseHoverLogic.cs @@ -30,25 +30,35 @@ namespace ICSharpCode.AvalonEdit.Rendering this.target = target; this.target.MouseLeave += MouseHoverLogicMouseLeave; this.target.MouseMove += MouseHoverLogicMouseMove; + this.target.MouseEnter += MouseHoverLogicMouseEnter; } - + void MouseHoverLogicMouseMove(object sender, MouseEventArgs e) { - Point newPosition = e.GetPosition(this.target); - Vector mouseMovement = mouseHoverStartPoint - newPosition; + Vector mouseMovement = mouseHoverStartPoint - e.GetPosition(this.target); if (Math.Abs(mouseMovement.X) > SystemParameters.MouseHoverWidth || Math.Abs(mouseMovement.Y) > SystemParameters.MouseHoverHeight) { - StopHovering(); - mouseHoverStartPoint = newPosition; - mouseHoverLastEventArgs = e; - mouseHoverTimer = new DispatcherTimer(SystemParameters.MouseHoverTime, DispatcherPriority.Background, - OnMouseHoverTimerElapsed, this.target.Dispatcher); - mouseHoverTimer.Start(); + StartHovering(e); } // do not set e.Handled - allow others to also handle MouseMove } - + + void MouseHoverLogicMouseEnter(object sender, MouseEventArgs e) + { + StartHovering(e); + // do not set e.Handled - allow others to also handle MouseEnter + } + + void StartHovering(MouseEventArgs e) + { + StopHovering(); + mouseHoverStartPoint = e.GetPosition(this.target); + mouseHoverLastEventArgs = e; + mouseHoverTimer = new DispatcherTimer(SystemParameters.MouseHoverTime, DispatcherPriority.Background, OnMouseHoverTimerElapsed, this.target.Dispatcher); + mouseHoverTimer.Start(); + } + void MouseHoverLogicMouseLeave(object sender, MouseEventArgs e) { StopHovering(); @@ -116,6 +126,7 @@ namespace ICSharpCode.AvalonEdit.Rendering if (!disposed) { this.target.MouseLeave -= MouseHoverLogicMouseLeave; this.target.MouseMove -= MouseHoverLogicMouseMove; + this.target.MouseEnter -= MouseHoverLogicMouseEnter; } disposed = true; }