Skip to content

Commit b98689a

Browse files
committed
SelectionMouseHandler: Fix crash when TextArea.Document is re-assigned to a different document instance while the mouse button is down.
icsharpcode/ILSpy#1862
1 parent 8c8ca88 commit b98689a

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

ICSharpCode.AvalonEdit/Editing/SelectionMouseHandler.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ void ITextAreaInputHandler.Attach()
7676
textArea.MouseMove += textArea_MouseMove;
7777
textArea.MouseLeftButtonUp += textArea_MouseLeftButtonUp;
7878
textArea.QueryCursor += textArea_QueryCursor;
79+
textArea.DocumentChanged += textArea_DocumentChanged;
7980
textArea.OptionChanged += textArea_OptionChanged;
8081

8182
enableTextDragDrop = textArea.Options.EnableTextDragDrop;
@@ -91,6 +92,7 @@ void ITextAreaInputHandler.Detach()
9192
textArea.MouseMove -= textArea_MouseMove;
9293
textArea.MouseLeftButtonUp -= textArea_MouseLeftButtonUp;
9394
textArea.QueryCursor -= textArea_QueryCursor;
95+
textArea.DocumentChanged -= textArea_DocumentChanged;
9496
textArea.OptionChanged -= textArea_OptionChanged;
9597
if (enableTextDragDrop) {
9698
DetachDragDrop();
@@ -132,6 +134,15 @@ void textArea_OptionChanged(object sender, PropertyChangedEventArgs e)
132134
DetachDragDrop();
133135
}
134136
}
137+
138+
void textArea_DocumentChanged(object sender, EventArgs e)
139+
{
140+
if (mode != MouseSelectionMode.None) {
141+
mode = MouseSelectionMode.None;
142+
textArea.ReleaseMouseCapture();
143+
}
144+
startWord = null;
145+
}
135146
#endregion
136147

137148
#region Dropping text
@@ -379,6 +390,10 @@ void textArea_QueryCursor(object sender, QueryCursorEventArgs e)
379390
void textArea_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
380391
{
381392
mode = MouseSelectionMode.None;
393+
if (textArea.Document == null) {
394+
// Avoid entering any selection mode when there's no document attached.
395+
return;
396+
}
382397
if (!e.Handled && e.ChangedButton == MouseButton.Left) {
383398
ModifierKeys modifiers = Keyboard.Modifiers;
384399
bool shift = (modifiers & ModifierKeys.Shift) == ModifierKeys.Shift;

0 commit comments

Comments
 (0)