From 21cc29b04ec03260eb8b809528b94afc4bf40cbb Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 6 Dec 2008 23:17:07 +0000 Subject: [PATCH] Fixed forum-8540: code completion window opens and closes immediately when overwriting an identifier. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3665 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/CSharpCompletionBinding.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs index e8fcc581fa..4a6e6cc51a 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs @@ -106,6 +106,16 @@ namespace CSharpBinding } if (char.IsLetter(ch) && CodeCompletionOptions.CompleteWhenTyping) { + if (editor.ActiveTextAreaControl.SelectionManager.HasSomethingSelected) { + // allow code completion when overwriting an identifier + cursor = editor.ActiveTextAreaControl.SelectionManager.SelectionCollection[0].Offset; + int endOffset = editor.ActiveTextAreaControl.SelectionManager.SelectionCollection[0].EndOffset; + // but block code completion when overwriting only part of an identifier + if (endOffset < editor.Document.TextLength && char.IsLetterOrDigit(editor.Document.GetCharAt(endOffset))) + return false; + editor.ActiveTextAreaControl.SelectionManager.RemoveSelectedText(); + editor.ActiveTextAreaControl.Caret.Position = editor.Document.OffsetToPosition(cursor); + } char prevChar = cursor > 1 ? editor.Document.GetCharAt(cursor - 1) : ' '; bool afterUnderscore = prevChar == '_'; if (afterUnderscore) {