Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(347)

Unified Diff: chrome/browser/ui/cocoa/browser_window_touch_bar.mm

Issue 2743633005: [Mac] Add Home button to Default Touch Bar (Closed)
Patch Set: Fix for rsesek Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}
« no previous file with comments | « chrome/browser/ui/cocoa/browser_window_touch_bar.h ('k') | chrome/browser/ui/cocoa/browser_window_touch_bar_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698