diff --git a/src/AddIns/BackendBindings/Scripting/Project/Src/ConsoleTextEditorKeyEventArgs.cs b/src/AddIns/BackendBindings/Scripting/Project/Src/ConsoleTextEditorKeyEventArgs.cs index 6739db5e95..f636756969 100644 --- a/src/AddIns/BackendBindings/Scripting/Project/Src/ConsoleTextEditorKeyEventArgs.cs +++ b/src/AddIns/BackendBindings/Scripting/Project/Src/ConsoleTextEditorKeyEventArgs.cs @@ -11,16 +11,22 @@ namespace ICSharpCode.Scripting public abstract class ConsoleTextEditorKeyEventArgs : EventArgs { Key key; + ModifierKeys modifiers; - public ConsoleTextEditorKeyEventArgs(Key key) + public ConsoleTextEditorKeyEventArgs(Key key, ModifierKeys modifiers) { this.key = key; + this.modifiers = modifiers; } public Key Key { get { return key; } } + public ModifierKeys Modifiers { + get { return modifiers; } + } + public abstract bool Handled { get; set; } diff --git a/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs index 7e2dee9aca..765ad4967a 100644 --- a/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs +++ b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs @@ -136,11 +136,10 @@ namespace ICSharpCode.Scripting /// void ProcessPreviewKeyDown(object source, ConsoleTextEditorKeyEventArgs e) { - Key keyPressed = e.Key; - e.Handled = HandleKeyDown(keyPressed); + e.Handled = HandleKeyDown(e.Key, e.Modifiers); } - bool HandleKeyDown(Key keyPressed) + bool HandleKeyDown(Key keyPressed, ModifierKeys keyModifiers) { if (textEditor.IsCompletionWindowDisplayed) { return false; @@ -153,6 +152,8 @@ namespace ICSharpCode.Scripting case Key.Up: case Key.Down: return false; + case Key.C: + return keyModifiers != ModifierKeys.Control; default: return true; } diff --git a/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleTextEditorKeyEventArgs.cs b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleTextEditorKeyEventArgs.cs index c7eca6e5f1..a427ae59d4 100644 --- a/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleTextEditorKeyEventArgs.cs +++ b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleTextEditorKeyEventArgs.cs @@ -11,7 +11,7 @@ namespace ICSharpCode.Scripting KeyEventArgs e; public ScriptingConsoleTextEditorKeyEventArgs(KeyEventArgs e) - : base(e.Key) + : base(e.Key, e.KeyboardDevice.Modifiers) { this.e = e; } diff --git a/src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleReadOnlyRegionsTests.cs b/src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleReadOnlyRegionsTests.cs index 0b0a70dca0..83d3d0a5c4 100644 --- a/src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleReadOnlyRegionsTests.cs +++ b/src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleReadOnlyRegionsTests.cs @@ -155,5 +155,14 @@ namespace ICSharpCode.Scripting.Tests.Console Assert.AreEqual(String.Empty, TestableScriptingConsole.GetCurrentLine()); } + + [Test] + public void PreviewKeyDown_ControlCInReadOnlyRegion_HandledSetToFalseSoCopyInReadOnlyRegionAllowed() + { + FakeConsoleTextEditor.RaisePreviewKeyDownEventForDialogKey(Key.Left); + bool result = FakeConsoleTextEditor.RaisePreviewKeyDownEvent(Key.C, ModifierKeys.Control); + + Assert.IsFalse(result); + } } } diff --git a/src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditor.cs b/src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditor.cs index bf5ba2446e..b2710b8e5f 100644 --- a/src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditor.cs +++ b/src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditor.cs @@ -28,14 +28,14 @@ namespace ICSharpCode.Scripting.Tests.Utils public StringBuilder PreviousLines = new StringBuilder(); public StringBuilder LineBuilder = new StringBuilder(); - + public event ConsoleTextEditorKeyEventHandler PreviewKeyDown; public FakeConsoleTextEditor() { TotalLines = 1; } - + public void Dispose() { IsDisposed = true; @@ -68,9 +68,9 @@ namespace ICSharpCode.Scripting.Tests.Utils } } - public bool RaisePreviewKeyDownEvent(Key key) + public bool RaisePreviewKeyDownEvent(Key key, ModifierKeys modifiers = ModifierKeys.None) { - FakeConsoleTextEditorKeyEventArgs e = new FakeConsoleTextEditorKeyEventArgs(key); + FakeConsoleTextEditorKeyEventArgs e = new FakeConsoleTextEditorKeyEventArgs(key, modifiers); OnPreviewKeyDown(e); if (!e.Handled) { KeyConverter converter = new KeyConverter(); @@ -174,7 +174,7 @@ namespace ICSharpCode.Scripting.Tests.Utils IsCompletionWindowDisplayed = true; this.CompletionProviderPassedToShowCompletionWindow = completionDataProvider; } - + public void MakeCurrentContentReadOnly() { IsMakeCurrentContentReadOnlyCalled = true; diff --git a/src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditorKeyEventArgs.cs b/src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditorKeyEventArgs.cs index 011ae2f621..ad8a3ba418 100644 --- a/src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditorKeyEventArgs.cs +++ b/src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditorKeyEventArgs.cs @@ -11,8 +11,8 @@ namespace ICSharpCode.Scripting.Tests.Utils { bool handled; - public FakeConsoleTextEditorKeyEventArgs(Key key) - : base(key) + public FakeConsoleTextEditorKeyEventArgs(Key key, ModifierKeys modifiers = ModifierKeys.None) + : base(key, modifiers) { }