diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs index 2c1fc063bd..624eb878b4 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs @@ -13,12 +13,12 @@ using System.Windows.Controls; using System.Windows.Data; using System.Windows.Input; using System.Windows.Threading; - using ICSharpCode.AvalonEdit.AddIn.Options; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Editing; using ICSharpCode.AvalonEdit.Highlighting; using ICSharpCode.AvalonEdit.Rendering; +using ICSharpCode.AvalonEdit.Search; using ICSharpCode.AvalonEdit.Utils; using ICSharpCode.Core; using ICSharpCode.Core.Presentation; @@ -206,6 +206,7 @@ namespace ICSharpCode.AvalonEdit.AddIn codeEditorView.TextArea.Caret.PositionChanged += TextAreaCaretPositionChanged; codeEditorView.TextArea.DefaultInputHandler.CommandBindings.Add( new CommandBinding(CustomCommands.CtrlSpaceCompletion, OnCodeCompletion)); + codeEditorView.TextArea.DefaultInputHandler.NestedInputHandlers.Add(new SearchInputHandler(codeEditorView.TextArea)); textView.BackgroundRenderers.Add(textMarkerService); textView.LineTransformers.Add(textMarkerService); diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs index e7bb039932..2494fc6766 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs @@ -7,7 +7,6 @@ using System.Windows; using System.Windows.Input; using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.AvalonEdit.Search; namespace ICSharpCode.AvalonEdit.Editing { @@ -42,9 +41,6 @@ namespace ICSharpCode.AvalonEdit.Editing this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Undo, ExecuteUndo, CanExecuteUndo)); this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Redo, ExecuteRedo, CanExecuteRedo)); - this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Find, ExecuteFind)); - this.CommandBindings.Add(new CommandBinding(SearchCommands.FindNext, ExecuteFindNext)); - this.CommandBindings.Add(new CommandBinding(SearchCommands.FindPrevious, ExecuteFindPrevious)); } internal static KeyBinding CreateFrozenKeyBinding(ICommand command, ModifierKeys modifiers, Key key) @@ -110,28 +106,5 @@ namespace ICSharpCode.AvalonEdit.Editing } } #endregion - - void ExecuteFind(object sender, ExecutedRoutedEventArgs e) - { - var panel = TextArea.TextView.Layers.OfType().FirstOrDefault(); - if (panel == null) - new SearchPanel(TextArea); - else - panel.Reactivate(); - } - - void ExecuteFindNext(object sender, ExecutedRoutedEventArgs e) - { - var panel = TextArea.TextView.Layers.OfType().FirstOrDefault(); - if (panel != null) - panel.FindNext(); - } - - void ExecuteFindPrevious(object sender, ExecutedRoutedEventArgs e) - { - var panel = TextArea.TextView.Layers.OfType().FirstOrDefault(); - if (panel != null) - panel.FindPrevious(); - } } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs index 71ea4226ac..c48098994b 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs @@ -35,4 +35,44 @@ namespace ICSharpCode.AvalonEdit.Search new InputGestureCollection { new KeyGesture(Key.F3, ModifierKeys.Shift) } ); } + + /// + /// TextAreaInputHandler that registers all search-related commands. + /// + public class SearchInputHandler : TextAreaInputHandler + { + /// + /// Creates a new SearchInputHandler and registers the search-related commands. + /// + public SearchInputHandler(TextArea textArea) + : base(textArea) + { + this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Find, ExecuteFind)); + this.CommandBindings.Add(new CommandBinding(SearchCommands.FindNext, ExecuteFindNext)); + this.CommandBindings.Add(new CommandBinding(SearchCommands.FindPrevious, ExecuteFindPrevious)); + } + + void ExecuteFind(object sender, ExecutedRoutedEventArgs e) + { + var panel = TextArea.TextView.Layers.OfType().FirstOrDefault(); + if (panel == null) + new SearchPanel(TextArea); + else + panel.Reactivate(); + } + + void ExecuteFindNext(object sender, ExecutedRoutedEventArgs e) + { + var panel = TextArea.TextView.Layers.OfType().FirstOrDefault(); + if (panel != null) + panel.FindNext(); + } + + void ExecuteFindPrevious(object sender, ExecutedRoutedEventArgs e) + { + var panel = TextArea.TextView.Layers.OfType().FirstOrDefault(); + if (panel != null) + panel.FindPrevious(); + } + } }