From 6859bdf5b60f3a0a82445ea13303b1cdfd02bcf3 Mon Sep 17 00:00:00 2001 From: Artem Bochkarev Date: Mon, 21 May 2018 22:27:44 +0700 Subject: [PATCH] IDEA-163208: add close button into 'stop running' panel --- .../execution/actions/StopAction.java | 22 +++++++++++-------- .../ui/impl/DialogWrapperPeerImpl.java | 2 +- .../intellij/ui/mac/touchbar/TouchBar.java | 12 +++++++++- .../ui/mac/touchbar/TouchBarActionBase.java | 2 -- .../ui/mac/touchbar/TouchBarsManager.java | 4 ++-- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/actions/StopAction.java b/platform/lang-impl/src/com/intellij/execution/actions/StopAction.java index 2921ffb6ad76..9b42e70a4d47 100644 --- a/platform/lang-impl/src/com/intellij/execution/actions/StopAction.java +++ b/platform/lang-impl/src/com/intellij/execution/actions/StopAction.java @@ -105,8 +105,7 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU } if (e.getPlace().equals(ActionPlaces.TOUCHBAR_GENERAL)) { - final TouchBar tb = createStopSelectTouchBar(stoppableDescriptors); - TouchBarsManager.showTempTouchBar(tb); + _showStopRunningBar(stoppableDescriptors); return; } @@ -263,25 +262,30 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU || processHandler instanceof KillableProcess && ((KillableProcess)processHandler).canKillProcess()); } - private static TouchBar createStopSelectTouchBar(List stoppableDescriptors) { + private static void _showStopRunningBar(List stoppableDescriptors) { + if (!TouchBarsManager.isTouchBarAvailable()) + return; + + final TouchBar tb; try (NSAutoreleaseLock lock = new NSAutoreleaseLock()) { - TouchBar result = new TouchBar("select_running_to_stop", false); - result.addButton(null, "Stop all", () -> { + tb = new TouchBar("select_running_to_stop", true, true); + tb.addButton(null, "Stop all", () -> { for (RunContentDescriptor sd : stoppableDescriptors) ExecutionManagerImpl.stopProcess(sd); - TouchBarsManager.closeTouchBar(result, true); + TouchBarsManager.closeTouchBar(tb, true); }); - final TBItemScrubber stopScrubber = result.addScrubber(); + final TBItemScrubber stopScrubber = tb.addScrubber(); List scrubItems = new ArrayList<>(); for (RunContentDescriptor sd : stoppableDescriptors) { scrubItems.add(new TBItemScrubber.ItemData(sd.getIcon(), sd.getDisplayName(), () -> { ExecutionManagerImpl.stopProcess(sd); - TouchBarsManager.closeTouchBar(result, true); + TouchBarsManager.closeTouchBar(tb, true); })); } stopScrubber.setItems(scrubItems); - return result; } + + TouchBarsManager.showStopRunningBar(tb); } abstract static class HandlerItem { diff --git a/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java b/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java index 5a153fa37ee9..43a2ddc17c9e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java @@ -428,7 +428,7 @@ public class DialogWrapperPeerImpl extends DialogWrapperPeer { myDialog.getWindow().setAutoRequestFocus(true); if (myTouchBarButtons != null && myProject != null) - myTouchBar = TouchBarsManager.showTempButtonsBar(myTouchBarButtons, myProject); + myTouchBar = TouchBarsManager.showDlgButtonsBar(myTouchBarButtons, myProject); try { myDialog.show(); diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBar.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBar.java index 9680e10ea602..dbf2cdc4f4fe 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBar.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBar.java @@ -20,6 +20,7 @@ public class TouchBar implements NSTLibrary.ItemCreator { protected ID myNativePeer; // java wrapper holds native object protected long myCounter = 0; protected final List myItems = new ArrayList<>(); + protected final boolean myReleaseOnClose; protected final TBItemButton myCustomEsc; @@ -29,12 +30,18 @@ public class TouchBar implements NSTLibrary.ItemCreator { myName = "EMPTY_STUB_TOUCHBAR"; myCustomEsc = null; myNativePeer = ID.NIL; + myReleaseOnClose = false; } public TouchBar(@NotNull String touchbarName, boolean replaceEsc) { + this(touchbarName, replaceEsc, false); + } + + public TouchBar(@NotNull String touchbarName, boolean replaceEsc, boolean releaseOnClose) { myName = touchbarName; myCustomEsc = replaceEsc ? new TBItemButton(genNewID("esc"), AllIcons.Actions.Cancel, null, this::_closeSelf) : null; myNativePeer = NST.createTouchBar(touchbarName, this, myCustomEsc != null ? myCustomEsc.myUid : null); + myReleaseOnClose = releaseOnClose; } public boolean isManualClose() { return myCustomEsc != null; } @@ -149,7 +156,10 @@ public class TouchBar implements NSTLibrary.ItemCreator { public void setPrincipal(@NotNull TBItem item) { NST.setPrincipal(myNativePeer, item.myUid); } public void onBeforeShow() {} - public void onHide() {} + public void onHide() { + if (myReleaseOnClose) + release(); + } String genNewID(String desc) { return String.format("%s.%s.%d", myName, desc, myCounter++); } diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarActionBase.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarActionBase.java index 64a1e2cfb761..ad9fb1a143fb 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarActionBase.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarActionBase.java @@ -85,8 +85,6 @@ public class TouchBarActionBase extends TouchBarProjectBase { }); } - public void addActionGroupButtons(ActionGroup actionGroup, ModalityState modality, int showMode) { addActionGroupButtons(actionGroup, modality, showMode, null, null); } - public void addActionGroupButtons(ActionGroup actionGroup, ModalityState modality, int showMode, INodeFilter filter, ICustomizer customizer) { _traverse(actionGroup, new ILeafVisitor() { private int mySeparatorCounter = 0; diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarsManager.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarsManager.java index 6b3125611819..4a0353f23350 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarsManager.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TouchBarsManager.java @@ -91,7 +91,7 @@ public class TouchBarsManager { ); } - public static TouchBar showTempButtonsBar(List jbuttons, Project project) { + public static TouchBar showDlgButtonsBar(List jbuttons, Project project) { final TouchBar tb = _createButtonsBar(jbuttons, project); _showTempTouchBar(tb, BarType.DIALOG); return tb; @@ -220,7 +220,7 @@ public class TouchBarsManager { } - synchronized public static void showTempTouchBar(TouchBar tb) { + synchronized public static void showStopRunningBar(TouchBar tb) { _showTempTouchBar(tb, BarType.DIALOG); }