diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ITextEditor.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ITextEditor.cs
index f11c3e6117..e5fb1235e0 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ITextEditor.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ITextEditor.cs
@@ -93,6 +93,11 @@ namespace ICSharpCode.PythonBinding
/// Shows the code completion window.
///
void ShowCompletionWindow(ICompletionDataProvider completionDataProvider);
+
+ ///
+ /// Indicates whether the completion window is currently being displayed.
+ ///
+ bool IsCompletionWindowDisplayed {get;}
///
/// Makes the current text content read only. Text can be entered at the end.
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsole.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsole.cs
index f8901c027b..434394315b 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsole.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsole.cs
@@ -212,6 +212,10 @@ namespace ICSharpCode.PythonBinding
///
bool ProcessDialogKeyPress(Keys keyData)
{
+ if (textEditor.IsCompletionWindowDisplayed) {
+ return false;
+ }
+
if (IsInReadOnlyRegion) {
switch (keyData) {
case Keys.Left:
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/TextEditor.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/TextEditor.cs
index e5b0b324ed..f63e3be68b 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/TextEditor.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/TextEditor.cs
@@ -158,6 +158,10 @@ namespace ICSharpCode.PythonBinding
}
}
+ public bool IsCompletionWindowDisplayed {
+ get { return completionWindow != null; }
+ }
+
///
/// Gets the range of the currently selected text.
///
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Console/KeysPressedWhenCompletionWindowOpenTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Console/KeysPressedWhenCompletionWindowOpenTestFixture.cs
new file mode 100644
index 0000000000..1a64744be0
--- /dev/null
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Console/KeysPressedWhenCompletionWindowOpenTestFixture.cs
@@ -0,0 +1,57 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+using System;
+using System.Windows.Forms;
+
+using ICSharpCode.PythonBinding;
+using ICSharpCode.SharpDevelop;
+using ICSharpCode.TextEditor.Gui.CompletionWindow;
+using Microsoft.Scripting.Hosting.Shell;
+using NUnit.Framework;
+using PythonBinding.Tests.Utils;
+
+namespace PythonBinding.Tests.Console
+{
+ ///
+ /// Pressing the up key closes the completion window when it should not. This fixture tests
+ /// that the up, down, home and end key do not close this window.
+ ///
+ [TestFixture]
+ public class KeysPressedWhenCompletionWindowOpenTestFixture
+ {
+ PythonConsole pythonConsole;
+ MockTextEditor textEditor;
+ string prompt = ">>> ";
+
+ [SetUp]
+ public void Init()
+ {
+ textEditor = new MockTextEditor();
+ pythonConsole = new PythonConsole(textEditor, null);
+ pythonConsole.Write(prompt, Style.Prompt);
+
+ textEditor.RaiseKeyPressEvent('a');
+ textEditor.RaiseDialogKeyPressEvent(Keys.Enter);
+ pythonConsole.Write(prompt, Style.Prompt);
+ textEditor.RaiseKeyPressEvent('b');
+ textEditor.RaiseKeyPressEvent('.');
+ }
+
+ [Test]
+ public void UpKeyDoesNothing()
+ {
+ Assert.IsFalse(textEditor.RaiseDialogKeyPressEvent(Keys.Up));
+ }
+
+ [Test]
+ public void DownKeyDoesNothing()
+ {
+ Assert.IsFalse(textEditor.RaiseDialogKeyPressEvent(Keys.Down));
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Console/MockTextEditor.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Console/MockTextEditor.cs
index ee1c9a2bd2..13b3b6bccf 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Console/MockTextEditor.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Console/MockTextEditor.cs
@@ -33,6 +33,7 @@ namespace PythonBinding.Tests.Console
bool showCompletionWindowCalled;
bool makeReadOnlyCalled;
ICompletionDataProvider completionProvider;
+ bool completionWindowDisplayed;
public MockTextEditor()
{
@@ -210,9 +211,15 @@ namespace PythonBinding.Tests.Console
public void ShowCompletionWindow(ICompletionDataProvider completionDataProvider)
{
showCompletionWindowCalled = true;
+ completionWindowDisplayed = true;
this.completionProvider = completionDataProvider;
}
+ public bool IsCompletionWindowDisplayed {
+ get { return completionWindowDisplayed; }
+ set { completionWindowDisplayed = value; }
+ }
+
public void MakeCurrentContentReadOnly()
{
makeReadOnlyCalled = true;
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj b/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
index 215a716856..2e18bcd4d4 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
@@ -70,6 +70,7 @@
+