[RDCT] GTW-9280: Fix run popup sub-actions by storing run config id in a template presentation

GitOrigin-RevId: a33c1aa34f769d15d65889064e59a1dbc7b3443d
This commit is contained in:
Vyacheslav Moklev
2024-09-09 12:48:11 +03:00
committed by intellij-monorepo-bot
parent 6baca570a5
commit 0afaa8ad4e
2 changed files with 15 additions and 4 deletions

View File

@@ -10,6 +10,7 @@ import com.intellij.execution.impl.EditConfigurationsDialog;
import com.intellij.execution.impl.RunManagerImpl;
import com.intellij.execution.runToolbar.RunToolbarSlotManager;
import com.intellij.execution.ui.RedesignedRunWidgetKt;
import com.intellij.execution.ui.RunToolbarPopupKt;
import com.intellij.icons.AllIcons;
import com.intellij.ide.DataManager;
import com.intellij.idea.ActionsBundle;
@@ -553,6 +554,7 @@ public class RunConfigurationsComboBoxAction extends ComboBoxAction implements D
public SelectConfigAction(@NotNull Project project, @NotNull RunnerAndConfigurationSettings configuration) {
myProject = project;
myConfiguration = configuration;
getTemplatePresentation().putClientProperty(RunToolbarPopupKt.RUN_CONFIGURATION_ID, myConfiguration.getUniqueID());
// TODO remove when BackendAsyncActionHost.isNewActionUpdateEnabled is inlined
if (ClientId.getCurrentOrNull() != null && !Registry.is("rdct.new.async.actions", true)) {
Presentation p = getTemplatePresentation().clone();

View File

@@ -36,6 +36,7 @@ import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.ui.popup.PopupStep
import com.intellij.openapi.ui.popup.StackingPopupDispatcher
import com.intellij.openapi.ui.popup.util.PopupUtil
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.VirtualFile
@@ -80,6 +81,9 @@ private val recentLimit: Int get() = AdvancedSettings.getInt("max.recent.run.con
@JvmField
val RUN_CONFIGURATION_KEY = DataKey.create<RunnerAndConfigurationSettings>("sub.popup.parent.action")
@JvmField
internal val RUN_CONFIGURATION_ID: Key<String> = Key.create("sub.popup.run.configuration.unique.id")
private const val TAG_PINNED = "pinned"
private const val TAG_RECENT = "recent"
private const val TAG_REGULAR_HIDE = "regular-hide" // hidden behind "All configurations" toggle
@@ -234,12 +238,17 @@ internal class RunConfigurationsActionGroupPopup(actionGroup: ActionGroup,
serviceState = RunConfigurationStartHistory.getInstance(project)
list.setExpandableItemsEnabled(false)
(myStep as ActionPopupStep).setSubStepContextAdjuster { context, action ->
if (action is SelectConfigAction) {
CustomizedDataContext.withSnapshot(context) { sink ->
sink[RUN_CONFIGURATION_KEY] = action.configuration
val configuration = when {
action is SelectConfigAction -> action.configuration
else -> {
action.templatePresentation.getClientProperty(RUN_CONFIGURATION_ID)?.let { configId ->
RunManager.getInstance(project).allSettings.find { it.uniqueID == configId }
} ?: return@setSubStepContextAdjuster context
}
}
else context
CustomizedDataContext.withSnapshot(context) { sink ->
sink[RUN_CONFIGURATION_KEY] = configuration
}
}
pinnedSize = (myStep as ActionPopupStep).values.asSequence()
.filter { it.action !is Separator }