From 026922edd754d6302a92d6fb600a79de81d73814 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 4 Jul 2024 00:15:35 +0200 Subject: [PATCH] IJPL-157698 Go to class: Caret position in file is not restored correctly (part 2) GitOrigin-RevId: f79e920e2bdd7780d7c0f1cc67ec6390cfaa5274 --- .../intellij/util/EditSourceOnDoubleClickHandler.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/util/EditSourceOnDoubleClickHandler.kt b/platform/platform-api/src/com/intellij/util/EditSourceOnDoubleClickHandler.kt index 1e5c98269d0b..992c29b395ca 100644 --- a/platform/platform-api/src/com/intellij/util/EditSourceOnDoubleClickHandler.kt +++ b/platform/platform-api/src/com/intellij/util/EditSourceOnDoubleClickHandler.kt @@ -7,9 +7,11 @@ import com.intellij.ide.ui.IdeUiService import com.intellij.ide.util.treeView.NodeDescriptor import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext +import com.intellij.openapi.application.EDT import com.intellij.openapi.application.ModalityState import com.intellij.openapi.components.ComponentManagerEx import com.intellij.openapi.components.serviceAsync +import com.intellij.openapi.progress.blockingContext import com.intellij.openapi.util.Key import com.intellij.openapi.util.registry.Registry import com.intellij.platform.ide.navigation.NavigationOptions @@ -19,7 +21,9 @@ import com.intellij.ui.DoubleClickListener import com.intellij.ui.treeStructure.treetable.TreeTable import com.intellij.util.ui.tree.ExpandOnDoubleClick import com.intellij.util.ui.tree.TreeUtil +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.jetbrains.annotations.ApiStatus.Internal import java.awt.Component import java.awt.event.MouseEvent @@ -197,7 +201,13 @@ object EditSourceOnDoubleClickHandler { (project as ComponentManagerEx).getCoroutineScope().launch(ClientId.coroutineContext()) { val options = NavigationOptions.defaultOptions().requestFocus(true).preserveCaret(true) project.serviceAsync().navigate(asyncContext, options) - whenPerformed?.run() + whenPerformed?.let { task -> + withContext(Dispatchers.EDT) { + blockingContext { + task.run() + } + } + } } } else {