From 56396944dab709bd05e06edca96272cff712e689 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 10 Aug 2011 16:59:53 +0200 Subject: [PATCH] disable unnecessary scrolling during lookup item insertion --- .../codeInsight/lookup/impl/TypedHandler.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java index dbf450fa2409..9e1f60a65900 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java @@ -35,6 +35,7 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorModificationUtil; import com.intellij.openapi.editor.SelectionModel; import com.intellij.openapi.editor.actionSystem.TypedActionHandler; +import com.intellij.openapi.editor.ex.ScrollingModelEx; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileEditor.FileDocumentManager; import org.jetbrains.annotations.NotNull; @@ -127,30 +128,37 @@ public class TypedHandler extends TypedActionHandlerBase { SelectionModel sm = editor.getSelectionModel(); final boolean smartUndo = !sm.hasSelection() && !sm.hasBlockSelection() && process != null && process.isAutopopupCompletion(); final Runnable restore = CodeCompletionHandlerBase.rememberDocumentState(editor); - if (smartUndo) { + final ScrollingModelEx scrollingModel = (ScrollingModelEx)editor.getScrollingModel(); + scrollingModel.accumulateViewportChanges(); + try { + if (smartUndo) { + CommandProcessor.getInstance().executeCommand(editor.getProject(), new Runnable() { + @Override + public void run() { + lookup.performGuardedChange(baseChange); + } + }, null, "Just insert the completion char"); + } + CommandProcessor.getInstance().executeCommand(editor.getProject(), new Runnable() { @Override public void run() { - lookup.performGuardedChange(baseChange); + if (smartUndo) { + AccessToken token = WriteAction.start(); + try { + lookup.performGuardedChange(restore); + } + finally { + token.finish(); + } + } + lookup.finishLookup(charTyped); } - }, null, "Just insert the completion char"); + }, null, "Undo inserting the completion char and select the item"); + } + finally { + scrollingModel.flushViewportChanges(); } - - CommandProcessor.getInstance().executeCommand(editor.getProject(), new Runnable() { - @Override - public void run() { - if (smartUndo) { - AccessToken token = WriteAction.start(); - try { - lookup.performGuardedChange(restore); - } - finally { - token.finish(); - } - } - lookup.finishLookup(charTyped); - } - }, null, "Undo inserting the completion char and select the item"); } static CharFilter.Result getLookupAction(final char charTyped, final LookupImpl lookup) {