From 607d3cc44d5d47393fa58f9ed8fd104c5eaea67d Mon Sep 17 00:00:00 2001 From: Artem Bochkarev Date: Mon, 16 Jul 2018 17:32:42 +0700 Subject: [PATCH] MacBook touch bar: remove arrow-icon from 'Add configuration' button (of default touchbar) also hide run-buttons when configuration isn't defined fixed point 3 from IDEA-194893 MacBook touch bar: improve Configurations popover --- bin/mac/libnst64.dylib | Bin 57512 -> 57696 bytes native/MacTouchBar/src/Button.m | 22 +++++--- native/MacTouchBar/src/Scrubber.m | 2 +- .../intellij/ui/mac/touchbar/BuildUtils.java | 20 ++++++-- .../ui/mac/touchbar/TBItemAnActionButton.java | 48 +++++++++++++++--- .../ui/mac/touchbar/TBItemButton.java | 11 +++- 6 files changed, 84 insertions(+), 19 deletions(-) diff --git a/bin/mac/libnst64.dylib b/bin/mac/libnst64.dylib index be77c80a0ec9ffc0688acadbb548e974639b0b14..a68ebf7c74acb980a59a46ebf24e78d78587297a 100755 GIT binary patch delta 12882 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 delta 12554 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 aY66?xe-8J9`j1E9F}nG?k2jc9<$nR&*x-u* diff --git a/native/MacTouchBar/src/Button.m b/native/MacTouchBar/src/Button.m index b345fbb291a0..9560bcb70f55 100644 --- a/native/MacTouchBar/src/Button.m +++ b/native/MacTouchBar/src/Button.m @@ -403,15 +403,23 @@ void updateButton( void setArrowImage(id buttObj, const char *raster4ByteRGBA, int w, int h) { NSCustomTouchBarItem *container = buttObj; // TODO: check types NSButtonJAction *button = (container).view; // TODO: check types + NSAutoreleasePool *edtPool = [NSAutoreleasePool new]; - if (raster4ByteRGBA == NULL || w <= 0) { - [button setArrowImg:nil]; - return; + NSImage *img = nil; + if (raster4ByteRGBA != NULL && w > 0) + img = createImgFrom4ByteRGBA((const unsigned char *) raster4ByteRGBA, w, h); + + if ([NSThread isMainThread]) { + [button setArrowImg:img]; + //NSLog(@"sync set arrow: w=%d h=%d", w, h); + } else { + dispatch_async(dispatch_get_main_queue(), ^{ + // NOTE: block is copied, img/text objects is automatically retained + // nstrace(@"\tperform update button [%@] (thread: %@)", container.identifier, [NSThread currentThread]); + [button setArrowImg:img]; + //NSLog(@"async set arrow: w=%d h=%d", w, h); + }); } - NSAutoreleasePool *edtPool = [NSAutoreleasePool new]; - NSImage *img = createImgFrom4ByteRGBA((const unsigned char *) raster4ByteRGBA, w, h); - [button setArrowImg:img]; - //NSLog(@"set arrow: w=%d h=%d", w, h); [edtPool release]; } \ No newline at end of file diff --git a/native/MacTouchBar/src/Scrubber.m b/native/MacTouchBar/src/Scrubber.m index db7ba7b5faba..246a0e5fe642 100644 --- a/native/MacTouchBar/src/Scrubber.m +++ b/native/MacTouchBar/src/Scrubber.m @@ -113,7 +113,6 @@ id createScrubber(const char* uid, int itemWidth, ScrubberItemData * items, int [scrubber registerClass:[ScrubberItemView class] forItemIdentifier:g_scrubberItemIdentifier]; - scrubber.showsAdditionalContentIndicators = NO;// For the image scrubber, we want the control to draw a fade effect to indicate that there is additional unscrolled content. scrubber.selectedIndex = -1; NSScrubberFlowLayout *scrubberLayout = [[[NSScrubberFlowLayout alloc] init] autorelease]; @@ -123,6 +122,7 @@ id createScrubber(const char* uid, int itemWidth, ScrubberItemData * items, int scrubber.mode = NSScrubberModeFree; scrubber.showsArrowButtons = NO; + scrubber.showsAdditionalContentIndicators = YES; scrubber.selectionOverlayStyle = nil; [scrubber.widthAnchor constraintGreaterThanOrEqualToConstant:itemWidth].active = YES; diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/BuildUtils.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/BuildUtils.java index ee5e86c8190c..fe8133f6d614 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/BuildUtils.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/BuildUtils.java @@ -48,13 +48,14 @@ class BuildUtils { private static final String ourLargeSeparatorText = "type.large"; private static final String ourFlexibleSeparatorText = "type.flexible"; - private static final int ourRunConfigurationPopoverWidth = 143; private static final int BUTTON_MIN_WIDTH_DLG = 107; private static final int BUTTON_BORDER = 16; private static final int BUTTON_IMAGE_MARGIN = 2; static void addActionGroupButtons(@NotNull TouchBar out, @NotNull ActionGroup actionGroup, @Nullable String filterGroupPrefix, @Nullable Customizer customizer) { _traverse(actionGroup, new GroupVisitor(out, filterGroupPrefix, customizer)); + if (customizer != null) + customizer.finish(); } static ActionGroup getCustomizedGroup(@NotNull String barId) { @@ -401,6 +402,9 @@ class BuildUtils { private final int myShowMode; private final @Nullable ModalityState myModality; + private TBItemAnActionButton myRunConfigurationButton; + private List myRunnerButtons; + Customizer(int showMode, @Nullable ModalityState modality) { myShowMode = showMode; myModality = modality; @@ -430,15 +434,23 @@ class BuildUtils { butt.setHiddenWhenDisabled(true); if (isRunConfigPopover) { + myRunConfigurationButton = butt; + } else if (butt.getAnAction() instanceof WelcomePopupAction) { butt.setHasArrowIcon(true); - butt.setLayout(ourRunConfigurationPopoverWidth, 0, 5, 8); - } else if (butt.getAnAction() instanceof WelcomePopupAction) - butt.setHasArrowIcon(true); + } else if ("RunnerActionsTouchbar".equals(ni.getParentGroupID()) || "Stop".equals(actId)) { + if (myRunnerButtons == null) myRunnerButtons = new ArrayList<>(); + myRunnerButtons.add(butt); + } final TouchbarDataKeys.ActionDesc actionDesc = butt.getAnAction().getTemplatePresentation().getClientProperty(TouchbarDataKeys.ACTIONS_DESCRIPTOR_KEY); if (actionDesc != null && actionDesc.getContextComponent() != null) butt.setComponent(actionDesc.getContextComponent()); } + + void finish() { + if (myRunConfigurationButton != null && myRunnerButtons != null && !myRunnerButtons.isEmpty()) + myRunConfigurationButton.setLinkedButtons(myRunnerButtons); + } } static @Nullable String getActionId(AnAction act) { diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemAnActionButton.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemAnActionButton.java index 4f6aeec6ef4b..3f01bd368a32 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemAnActionButton.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemAnActionButton.java @@ -1,6 +1,7 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.ui.mac.touchbar; +import com.intellij.icons.AllIcons; import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.ActionManagerEx; @@ -16,10 +17,13 @@ import javax.swing.*; import java.awt.*; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; +import java.util.List; import static java.awt.event.ComponentEvent.COMPONENT_FIRST; class TBItemAnActionButton extends TBItemButton { + private static final int ourRunConfigurationPopoverWidth = 143; + public static final int SHOWMODE_IMAGE_ONLY = 0; public static final int SHOWMODE_TEXT_ONLY = 1; public static final int SHOWMODE_IMAGE_TEXT = 2; @@ -34,13 +38,12 @@ class TBItemAnActionButton extends TBItemButton { private boolean myAutoVisibility = true; private boolean myHiddenWhenDisabled = false; - private Component myComponent; + private @Nullable Component myComponent; + private @Nullable List myLinkedButtons; TBItemAnActionButton(@NotNull String uid, @Nullable ItemListener listener, @NotNull AnAction action) { super(uid, listener); - myAnAction = action; - myActionId = ApplicationManager.getApplication() == null ? action.toString() : ActionManager.getInstance().getId(myAnAction); - + setAnAction(action); setModality(null); if (action instanceof Toggleable) { @@ -55,6 +58,8 @@ class TBItemAnActionButton extends TBItemButton { TBItemAnActionButton setModality(ModalityState modality) { setAction(this::_performAction, true, modality); return this; } TBItemAnActionButton setShowMode(int showMode) { myShowMode = showMode; return this; } + void setLinkedButtons(@Nullable List linkedButtons) { myLinkedButtons = linkedButtons; } + void updateAnAction(Presentation presentation) { if (ApplicationManager.getApplication() == null) { if (myComponent instanceof JButton) { @@ -83,7 +88,11 @@ class TBItemAnActionButton extends TBItemButton { void setHiddenWhenDisabled(boolean hiddenWhenDisabled) { myHiddenWhenDisabled = hiddenWhenDisabled; } @NotNull AnAction getAnAction() { return myAnAction; } - void setAnAction(@NotNull AnAction newAction) { myAnAction = newAction; } // can be safely replaced without setAction (because _performAction will use updated reference to AnAction) + void setAnAction(@NotNull AnAction newAction) { + // can be safely replaced without setAction (because _performAction will use updated reference to AnAction) + myAnAction = newAction; + myActionId = ApplicationManager.getApplication() == null ? newAction.toString() : ActionManager.getInstance().getId(newAction); + } // returns true when visibility changed boolean updateVisibility(Presentation presentation) { // called from EDT @@ -91,11 +100,14 @@ class TBItemAnActionButton extends TBItemButton { return false; final boolean isVisible = presentation.isVisible() && (presentation.isEnabled() || !myHiddenWhenDisabled); - final boolean visibilityChanged = isVisible != myIsVisible; + boolean visibilityChanged = isVisible != myIsVisible; if (visibilityChanged) { myIsVisible = isVisible; // System.out.println(String.format("%s: visibility changed, now is [%s]", toString(), isVisible ? "visible" : "hidden")); } + if ("RunConfiguration".equals(myActionId)) + visibilityChanged = visibilityChanged || _setLinkedVisibility(presentation.getIcon() != AllIcons.General.Add); + return visibilityChanged; } void updateView(Presentation presentation) { // called from EDT @@ -119,6 +131,15 @@ class TBItemAnActionButton extends TBItemButton { final Object selectedProp = presentation.getClientProperty(Toggleable.SELECTED_PROPERTY); isSelected = selectedProp != null && selectedProp == Boolean.TRUE; } + if ("RunConfiguration".equals(myActionId)) { + if (presentation.getIcon() != AllIcons.General.Add) { + setHasArrowIcon(true); + setLayout(ourRunConfigurationPopoverWidth, 0, 5, 8); + } else { + setHasArrowIcon(false); + setLayout(0, 0, 5, 8); + } + } final boolean hideText = myShowMode == SHOWMODE_IMAGE_ONLY || (myShowMode == SHOWMODE_IMAGE_ONLY_IF_PRESENTED && icon != null); final String text = hideText ? null : presentation.getText(); @@ -126,6 +147,19 @@ class TBItemAnActionButton extends TBItemButton { update(icon, text, isSelected, !presentation.isEnabled()); } + private boolean _setLinkedVisibility(boolean visible) { + if (myLinkedButtons == null) + return false; + boolean visibilityChanged = false; + for (TBItemAnActionButton butt: myLinkedButtons) { + if (butt.myAutoVisibility != visible) + visibilityChanged = true; + butt.setAutoVisibility(visible); + butt.myIsVisible = visible; + } + return visibilityChanged; + } + private void _performAction() { if (ApplicationManager.getApplication() == null) { if (myComponent instanceof JButton) @@ -147,6 +181,8 @@ class TBItemAnActionButton extends TBItemButton { private static Component _getCurrentFocusComponent() { final KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); Component focusOwner = focusManager.getFocusOwner(); + if (focusOwner == null) + focusOwner = focusManager.getPermanentFocusOwner(); if (focusOwner == null) { // LOG.info(String.format("WARNING: [%s:%s] _getCurrentFocusContext: null focus-owner, use focused window", myUid, myActionId)); return focusManager.getFocusedWindow(); diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemButton.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemButton.java index 926efaff962d..20b1d714d05a 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemButton.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemButton.java @@ -40,7 +40,16 @@ class TBItemButton extends TBItem { return this; } - TBItemButton setHasArrowIcon(boolean hasArrowIcon) { myHasArrowIcon = hasArrowIcon; return this; } + TBItemButton setHasArrowIcon(boolean hasArrowIcon) { + if (hasArrowIcon != myHasArrowIcon) { + myHasArrowIcon = hasArrowIcon; + if (myNativePeer != ID.NIL) { + final Icon ic = myHasArrowIcon ? IconLoader.getIcon("/mac/touchbar/popoverArrow_dark.svg") : null; + NST.setArrowImage(myNativePeer, ic); + } + } + return this; + } TBItemButton setText(String text) { if (!Comparing.equal(text, myText)) {