From a7047035c4e93bdc77fbdb8cc397d7499f42b4ed Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 14 Mar 2013 18:06:29 +0100 Subject: [PATCH] Fixed performance bug when pressing Backspace - we were unnecessarily building the visual line for the intermediate state where the previous character is selected but not deleted. --- .../Editing/CaretNavigationCommandHandler.cs | 3 ++- .../Editing/TextAreaDefaultInputHandlers.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretNavigationCommandHandler.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretNavigationCommandHandler.cs index 210878a229..887a2236a1 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretNavigationCommandHandler.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretNavigationCommandHandler.cs @@ -140,7 +140,8 @@ namespace ICSharpCode.AvalonEdit.Editing TextViewPosition oldPosition = textArea.Caret.Position; MoveCaret(textArea, direction); textArea.Selection = textArea.Selection.StartSelectionOrSetEndpoint(oldPosition, textArea.Caret.Position); - textArea.Caret.BringCaretToView(); + if (!textArea.Document.IsInUpdate) // if we're inside a larger update (e.g. called by EditingCommandHandler.OnDelete()), avoid calculating the caret rectangle now + textArea.Caret.BringCaretToView(); } }; } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs index 24d8175244..61b88d568d 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs @@ -59,7 +59,7 @@ namespace ICSharpCode.AvalonEdit.Editing // Work around WPF memory leak: // KeyBinding retains a reference to whichever UIElement it is used in first. // Using a dummy element for this purpose ensures that we don't leak - // a real text editor (which a potentially large document). + // a real text editor (with a potentially large document). UIElement dummyElement = new UIElement(); dummyElement.InputBindings.AddRange(inputBindings); }