| Index: chrome/browser/ui/cocoa/browser_window_touch_bar.mm
|
| diff --git a/chrome/browser/ui/cocoa/browser_window_touch_bar.mm b/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
|
| index d812ab1ad0045f6dadfe83c946904de5f2abd9b3..13f1042f601ae3f3c4e761557590b0852d13121c 100644
|
| --- a/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
|
| +++ b/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
|
| @@ -4,6 +4,8 @@
|
|
|
| #import "chrome/browser/ui/cocoa/browser_window_touch_bar.h"
|
|
|
| +#include <memory>
|
| +
|
| #include "base/mac/mac_util.h"
|
| #import "base/mac/scoped_nsobject.h"
|
| #import "base/mac/sdk_forward_declarations.h"
|
| @@ -11,12 +13,16 @@
|
| #include "chrome/app/chrome_command_ids.h"
|
| #include "chrome/app/vector_icons/vector_icons.h"
|
| #include "chrome/browser/command_updater.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/search_engines/template_url_service_factory.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_command_controller.h"
|
| +#import "chrome/browser/ui/cocoa/browser_window_controller.h"
|
| #include "chrome/common/chrome_features.h"
|
| +#include "chrome/common/pref_names.h"
|
| #include "chrome/grit/generated_resources.h"
|
| #include "components/omnibox/browser/vector_icons.h"
|
| +#include "components/prefs/pref_member.h"
|
| #include "components/search_engines/util.h"
|
| #include "components/toolbar/vector_icons.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| @@ -37,6 +43,7 @@ const NSTouchBarCustomizationIdentifier kBrowserWindowTouchBarId =
|
| // Touch bar items identifiers.
|
| const NSTouchBarItemIdentifier kBackForwardTouchId = @"BackForwardTouchId";
|
| const NSTouchBarItemIdentifier kReloadOrStopTouchId = @"ReloadOrStopTouchId";
|
| +const NSTouchBarItemIdentifier kHomeTouchId = @"HomeTouchId";
|
| const NSTouchBarItemIdentifier kSearchTouchId = @"SearchTouchId";
|
| const NSTouchBarItemIdentifier kStarTouchId = @"StarTouchId";
|
| const NSTouchBarItemIdentifier kNewTabTouchId = @"NewTabTouchId";
|
| @@ -53,7 +60,8 @@ const SkColor kTouchBarStarActiveColor = gfx::kGoogleBlue500;
|
| const int kTouchBarIconSize = 16;
|
|
|
| // The width of the search button in the touch bar.
|
| -const int kTouchBarSearchButtonWidth = 280;
|
| +const int kSearchBtnWidthWithHomeBtn = 205;
|
| +const int kSearchBtnWidthWithoutHomeBtn = 280;
|
|
|
| // Creates an NSImage from the given VectorIcon.
|
| NSImage* CreateNSImageFromIcon(const gfx::VectorIcon& icon,
|
| @@ -76,6 +84,23 @@ NSButton* CreateTouchBarButton(const gfx::VectorIcon& icon,
|
| return button;
|
| }
|
|
|
| +// A class registered for C++ notifications. This is used to detect changes in
|
| +// the home button preferences and update the Touch Bar.
|
| +class HomePrefNotificationBridge {
|
| + public:
|
| + explicit HomePrefNotificationBridge(BrowserWindowController* bwc)
|
| + : bwc_(bwc) {}
|
| +
|
| + ~HomePrefNotificationBridge() {}
|
| +
|
| + void UpdateTouchBar() { [bwc_ invalidateTouchBar]; }
|
| +
|
| + private:
|
| + BrowserWindowController* bwc_; // Weak.
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(HomePrefNotificationBridge);
|
| +};
|
| +
|
| } // namespace
|
|
|
| @interface BrowserWindowTouchBar () {
|
| @@ -84,6 +109,14 @@ NSButton* CreateTouchBarButton(const gfx::VectorIcon& icon,
|
|
|
| // The browser associated with the touch bar.
|
| Browser* browser_; // Weak.
|
| +
|
| + BrowserWindowController* bwc_; // Weak, own us.
|
| +
|
| + // Used to monitor the optional home button pref.
|
| + BooleanPrefMember showHomeButton_;
|
| +
|
| + // Used to receive and handle notifications for the home button pref.
|
| + std::unique_ptr<HomePrefNotificationBridge> notificationBridge_;
|
| }
|
|
|
| // Creates and return the back and forward segmented buttons.
|
| @@ -98,11 +131,20 @@ NSButton* CreateTouchBarButton(const gfx::VectorIcon& icon,
|
| @synthesize isPageLoading = isPageLoading_;
|
| @synthesize isStarred = isStarred_;
|
|
|
| -- (instancetype)initWithBrowser:(Browser*)browser {
|
| +- (instancetype)initWithBrowser:(Browser*)browser
|
| + browserWindowController:(BrowserWindowController*)bwc {
|
| if ((self = [self init])) {
|
| DCHECK(browser);
|
| commandUpdater_ = browser->command_controller()->command_updater();
|
| browser_ = browser;
|
| + bwc_ = bwc;
|
| +
|
| + notificationBridge_.reset(new HomePrefNotificationBridge(bwc_));
|
| + PrefService* prefs = browser->profile()->GetPrefs();
|
| + showHomeButton_.Init(
|
| + prefs::kShowHomeButton, prefs,
|
| + base::Bind(&HomePrefNotificationBridge::UpdateTouchBar,
|
| + base::Unretained(notificationBridge_.get())));
|
| }
|
|
|
| return self;
|
| @@ -114,10 +156,19 @@ NSButton* CreateTouchBarButton(const gfx::VectorIcon& icon,
|
|
|
| base::scoped_nsobject<NSTouchBar> touchBar(
|
| [[NSClassFromString(@"NSTouchBar") alloc] init]);
|
| - NSArray* touchBarItemIdentifiers = @[
|
| - kBackForwardTouchId, kReloadOrStopTouchId, kSearchTouchId, kStarTouchId,
|
| - kNewTabTouchId
|
| - ];
|
| + NSArray* touchBarItemIdentifiers;
|
| + if (showHomeButton_.GetValue()) {
|
| + touchBarItemIdentifiers = @[
|
| + kBackForwardTouchId, kReloadOrStopTouchId, kHomeTouchId, kSearchTouchId,
|
| + kStarTouchId, kNewTabTouchId
|
| + ];
|
| + } else {
|
| + touchBarItemIdentifiers = @[
|
| + kBackForwardTouchId, kReloadOrStopTouchId, kSearchTouchId, kStarTouchId,
|
| + kNewTabTouchId
|
| + ];
|
| + }
|
| +
|
| [touchBar setCustomizationIdentifier:kBrowserWindowTouchBarId];
|
| [touchBar setDefaultItemIdentifiers:touchBarItemIdentifiers];
|
| [touchBar setCustomizationAllowedItemIdentifiers:touchBarItemIdentifiers];
|
| @@ -140,6 +191,9 @@ NSButton* CreateTouchBarButton(const gfx::VectorIcon& icon,
|
| isPageLoading_ ? kNavigateStopIcon : kNavigateReloadIcon;
|
| int command_id = isPageLoading_ ? IDC_STOP : IDC_RELOAD;
|
| [touchBarItem setView:CreateTouchBarButton(icon, self, command_id)];
|
| + } else if ([identifier isEqualTo:kHomeTouchId]) {
|
| + [touchBarItem
|
| + setView:CreateTouchBarButton(kNavigateHomeIcon, self, IDC_HOME)];
|
| } else if ([identifier isEqualTo:kNewTabTouchId]) {
|
| [touchBarItem setView:CreateTouchBarButton(kNewTabMacTouchbarIcon, self,
|
| IDC_NEW_TAB)];
|
| @@ -207,9 +261,9 @@ NSButton* CreateTouchBarButton(const gfx::VectorIcon& icon,
|
| action:@selector(executeCommand:)];
|
| searchButton.imageHugsTitle = YES;
|
| searchButton.tag = IDC_FOCUS_LOCATION;
|
| - [searchButton.widthAnchor
|
| - constraintEqualToConstant:kTouchBarSearchButtonWidth]
|
| - .active = YES;
|
| + int width = showHomeButton_.GetValue() ? kSearchBtnWidthWithHomeBtn
|
| + : kSearchBtnWidthWithoutHomeBtn;
|
| + [searchButton.widthAnchor constraintEqualToConstant:width].active = YES;
|
| return searchButton;
|
| }
|
|
|
|
|