diff --git a/ILSpy/ILSpy.csproj b/ILSpy/ILSpy.csproj
index f61c643c4..1f3fc6f81 100644
--- a/ILSpy/ILSpy.csproj
+++ b/ILSpy/ILSpy.csproj
@@ -50,7 +50,7 @@
-
+
diff --git a/ILSpy/TextView/DecompilerTextView.cs b/ILSpy/TextView/DecompilerTextView.cs
index ad52a7046..b8fea2606 100644
--- a/ILSpy/TextView/DecompilerTextView.cs
+++ b/ILSpy/TextView/DecompilerTextView.cs
@@ -106,7 +106,8 @@ namespace ICSharpCode.ILSpy.TextView
textEditor.Options.RequireControlModifierForHyperlinkClick = false;
textEditor.TextArea.TextView.MouseHover += TextViewMouseHover;
textEditor.TextArea.TextView.MouseHoverStopped += TextViewMouseHoverStopped;
- textEditor.TextArea.TextView.MouseDown += TextViewMouseDown;
+ textEditor.TextArea.PreviewMouseDown += TextAreaMouseDown;
+ textEditor.TextArea.PreviewMouseUp += TextAreaMouseUp;
textEditor.SetBinding(Control.FontFamilyProperty, new Binding { Source = DisplaySettingsPanel.CurrentDisplaySettings, Path = new PropertyPath("SelectedFont") });
textEditor.SetBinding(Control.FontSizeProperty, new Binding { Source = DisplaySettingsPanel.CurrentDisplaySettings, Path = new PropertyPath("SelectedFontSize") });
textEditor.SetBinding(TextEditor.WordWrapProperty, new Binding { Source = DisplaySettingsPanel.CurrentDisplaySettings, Path = new PropertyPath("EnableWordWrap") });
@@ -602,12 +603,36 @@ namespace ICSharpCode.ILSpy.TextView
MainWindow.Instance.JumpToReference(reference);
}
- void TextViewMouseDown(object sender, MouseButtonEventArgs e)
+ Point? mouseDownPos;
+
+ void TextAreaMouseDown(object sender, MouseButtonEventArgs e)
{
- if (GetReferenceSegmentAtMousePosition() == null)
- ClearLocalReferenceMarks();
+ mouseDownPos = e.GetPosition(this);
}
-
+
+ void TextAreaMouseUp(object sender, MouseButtonEventArgs e)
+ {
+ if (mouseDownPos == null)
+ return;
+ Vector dragDistance = e.GetPosition(this) - mouseDownPos.Value;
+ if (Math.Abs(dragDistance.X) < SystemParameters.MinimumHorizontalDragDistance
+ && Math.Abs(dragDistance.Y) < SystemParameters.MinimumVerticalDragDistance
+ && e.ChangedButton == MouseButton.Left)
+ {
+ // click without moving mouse
+ var referenceSegment = GetReferenceSegmentAtMousePosition();
+ if (referenceSegment == null) {
+ ClearLocalReferenceMarks();
+ } else {
+ JumpToReference(referenceSegment);
+ textEditor.TextArea.ClearSelection();
+ }
+ // cancel mouse selection to avoid AvalonEdit selecting between the new
+ // cursor position and the mouse position.
+ textEditor.TextArea.MouseSelectionMode = MouseSelectionMode.None;
+ }
+ }
+
void ClearLocalReferenceMarks()
{
foreach (var mark in localReferenceMarks) {
diff --git a/ILSpy/TextView/ReferenceElementGenerator.cs b/ILSpy/TextView/ReferenceElementGenerator.cs
index 3e4e88ca0..262f7d598 100644
--- a/ILSpy/TextView/ReferenceElementGenerator.cs
+++ b/ILSpy/TextView/ReferenceElementGenerator.cs
@@ -105,16 +105,6 @@ namespace ICSharpCode.ILSpy.TextView
e.Cursor = referenceSegment.IsLocal ? Cursors.Arrow : Cursors.Hand;
}
- ///
- protected override void OnMouseDown(MouseButtonEventArgs e)
- {
- if (e.ChangedButton == MouseButton.Left && !e.Handled) {
- parent.JumpToReference(referenceSegment);
- if(!referenceSegment.IsLocal)
- e.Handled = true;
- }
- }
-
///
protected override VisualLineText CreateInstance(int length)
{