cancel long autopopup if focus leaves editor

This commit is contained in:
peter
2013-05-29 16:03:46 +02:00
parent b877da1fa6
commit e75c665b51
4 changed files with 29 additions and 0 deletions
@@ -31,6 +31,8 @@ import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.editor.*;
import com.intellij.openapi.editor.actionSystem.TypedAction;
import com.intellij.openapi.editor.event.*;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.editor.ex.FocusChangeListener;
import com.intellij.openapi.fileEditor.FileEditorManagerAdapter;
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
@@ -177,6 +179,19 @@ public abstract class CompletionPhase implements Disposable {
}
}
}, this);
if (indicator.isAutopopupCompletion()) {
// lookup is not visible, we have to check ourselves if editor retains focus
((EditorEx)indicator.getEditor()).addFocusListener(new FocusChangeListener() {
@Override
public void focusGained(Editor editor) {
}
@Override
public void focusLost(Editor editor) {
indicator.closeAndFinish(true);
}
}, this);
}
}
@Override
@@ -21,6 +21,7 @@ import com.intellij.ide.CutProvider;
import com.intellij.ide.DeleteProvider;
import com.intellij.ide.PasteProvider;
import com.intellij.ide.highlighter.HighlighterFactory;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.*;
@@ -628,6 +629,11 @@ public class EditorWindow extends UserDataHolderBase implements EditorEx {
myDelegate.addFocusListener(listener);
}
@Override
public void addFocusListener(@NotNull FocusChangeListener listener, Disposable parentDisposable) {
myDelegate.addFocusListener(listener, parentDisposable);
}
@Override
public Project getProject() {
return myDelegate.getProject();
@@ -19,6 +19,7 @@ import com.intellij.ide.CopyProvider;
import com.intellij.ide.CutProvider;
import com.intellij.ide.DeleteProvider;
import com.intellij.ide.PasteProvider;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.LogicalPosition;
@@ -105,6 +106,8 @@ public interface EditorEx extends Editor {
boolean setCaretEnabled(boolean enabled);
void addFocusListener(@NotNull FocusChangeListener listener);
void addFocusListener(@NotNull FocusChangeListener listener, Disposable parentDisposable);
void setOneLineMode(boolean b);
@@ -4268,6 +4268,11 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
myFocusListeners.add(listener);
}
@Override
public void addFocusListener(@NotNull FocusChangeListener listener, Disposable parentDisposable) {
ContainerUtil.add(listener, myFocusListeners, parentDisposable);
}
@Override
@Nullable
public Project getProject() {