From 4cd47d7fedbc7e2d66f25fd10634c85ffb5d904e Mon Sep 17 00:00:00 2001 From: Piotr Tomiak Date: Wed, 22 Oct 2025 11:20:10 +0200 Subject: [PATCH] [vcs] PAT-147 Use the first enabled push action as the main action. GitOrigin-RevId: 86494170b0333e42de12206163504369668ab52a --- .../intellij/dvcs/push/ui/VcsPushDialog.java | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsPushDialog.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsPushDialog.java index b81705155cfd..67a74a8d70eb 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsPushDialog.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsPushDialog.java @@ -22,6 +22,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.OptionAction; import com.intellij.openapi.ui.ValidationInfo; +import com.intellij.ui.components.JBOptionButton; import com.intellij.util.concurrency.annotations.RequiresEdt; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.JBDimension; @@ -85,7 +86,7 @@ public class VcsPushDialog extends DialogWrapper implements VcsPushUi, UiDataPro myTopPanel = myController.createTopPanel(); myPushActions = collectPushActions(); - myMainAction = new ComplexPushAction(myPushActions.get(0), myPushActions.subList(1, myPushActions.size())); + myMainAction = new ComplexPushAction(myPushActions.subList(0, myPushActions.size())); myMainAction.putValue(DEFAULT_ACTION, Boolean.TRUE); myController.startLoadingCommits(); @@ -343,10 +344,15 @@ public class VcsPushDialog extends DialogWrapper implements VcsPushUi, UiDataPro } public void updateOkActions() { - myMainAction.update(); for (ActionWrapper wrapper : myPushActions) { wrapper.update(); } + myMainAction.update(); + if (getButton(myMainAction) instanceof JBOptionButton o) { + if (!Arrays.equals(myMainAction.getOptions(), o.getOptions())) { + o.setOptions(myMainAction.getOptions()); + } + } } public void enableOkActions(boolean value) { @@ -380,13 +386,16 @@ public class VcsPushDialog extends DialogWrapper implements VcsPushUi, UiDataPro } private static final class ComplexPushAction extends AbstractAction implements OptionAction { - private final ActionWrapper myDefaultAction; - private final List myOptions; + private final List myActions; - private ComplexPushAction(@NotNull ActionWrapper defaultAction, @NotNull List additionalActions) { - super(defaultAction.getName()); - myDefaultAction = defaultAction; - myOptions = additionalActions; + private ActionWrapper myDefaultAction; + private List myOptions; + + private ComplexPushAction(@NotNull List actions) { + super(actions.getFirst().getName()); + myActions = actions; + myDefaultAction = actions.getFirst(); + myOptions = actions.subList(1, actions.size()); } @Override @@ -397,12 +406,19 @@ public class VcsPushDialog extends DialogWrapper implements VcsPushUi, UiDataPro @Override public void setEnabled(boolean isEnabled) { super.setEnabled(isEnabled); - for (Action optionAction : myOptions) { + for (Action optionAction : myActions) { optionAction.setEnabled(isEnabled); } } public void update() { + int firstEnabled = ContainerUtil.indexOf(myActions, it -> it.isEnabled()); + if (firstEnabled >= 0) { + myDefaultAction = myActions.get(firstEnabled); + myOptions = new ArrayList<>(); + myOptions.addAll(myActions.subList(0, firstEnabled)); + myOptions.addAll(myActions.subList(firstEnabled + 1, myActions.size())); + } VcsPushUi dialog = myDefaultAction.myDialog; PushActionBase realAction = myDefaultAction.myRealAction;