From 6d412b71aaa9de52685d991b0cf9c7147d942e1d Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 5 Feb 2010 18:22:17 +0300 Subject: [PATCH] move Ctrl-mouse calculation to background thread (RUBY-5727) --- .../codeInsight/navigation/CtrlMouseHandler.java | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java index 51cbc063ac..165567b14e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java @@ -31,6 +31,7 @@ import com.intellij.navigation.NavigationItem; import com.intellij.openapi.actionSystem.IdeActions; import com.intellij.openapi.actionSystem.MouseShortcut; import com.intellij.openapi.actionSystem.Shortcut; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.AbstractProjectComponent; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; @@ -160,6 +161,10 @@ public class CtrlMouseHandler extends AbstractProjectComponent { myStoredModifiers = mouseEvent.getModifiers(); BrowseMode browseMode = getBrowseMode(myStoredModifiers); + if (myTooltipProvider != null) { + myTooltipProvider.dispose(); + } + if (browseMode == BrowseMode.None || offset >= selStart && offset < selEnd) { disposeHighlighter(); myTooltipProvider = null; @@ -439,18 +444,36 @@ public class CtrlMouseHandler extends AbstractProjectComponent { private final Editor myEditor; private final LogicalPosition myPosition; private BrowseMode myBrowseMode; + private boolean myDisposed; public TooltipProvider(Editor editor, LogicalPosition pos) { myEditor = editor; myPosition = pos; } + public void dispose() { + myDisposed = true; + } + public BrowseMode getBrowseMode() { return myBrowseMode; } public void execute(BrowseMode browseMode) { myBrowseMode = browseMode; + + ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { + public void run() { + ApplicationManager.getApplication().runReadAction(new Runnable() { + public void run() { + doExecute(); + } + }); + } + }); + } + + private void doExecute() { final Info info; try { info = getInfoAt(myEditor, myPosition, myBrowseMode); @@ -461,6 +484,15 @@ public class CtrlMouseHandler extends AbstractProjectComponent { } if (info == null) return; + SwingUtilities.invokeLater(new Runnable() { + public void run() { + showHint(info); + } + }); + } + + private void showHint(Info info) { + if (myDisposed) return; Component internalComponent = myEditor.getContentComponent(); if (myHighlighter != null) { if (!info.isSimilarTo(myStoredInfo)) { -- 2.11.4.GIT