| Index: chrome/browser/cocoa/browser_window_controller.mm
|
| diff --git a/chrome/browser/cocoa/browser_window_controller.mm b/chrome/browser/cocoa/browser_window_controller.mm
|
| index f310c07f17507c3f9b3dd9fbe6777afd67253c41..73781e4f8af10661d1e1dec40ee897689d5cd5af 100644
|
| --- a/chrome/browser/cocoa/browser_window_controller.mm
|
| +++ b/chrome/browser/cocoa/browser_window_controller.mm
|
| @@ -4,6 +4,7 @@
|
|
|
| #include <Carbon/Carbon.h>
|
|
|
| +#include "app/l10n_util_mac.h"
|
| #include "base/mac_util.h"
|
| #include "base/scoped_nsdisable_screen_updates.h"
|
| #import "base/scoped_nsobject.h"
|
| @@ -39,8 +40,10 @@
|
| #import "chrome/browser/cocoa/tab_view.h"
|
| #import "chrome/browser/cocoa/toolbar_controller.h"
|
| #import "chrome/browser/browser_theme_provider.h"
|
| +#include "chrome/browser/sync/sync_status_ui_helper.h"
|
| #include "chrome/common/pref_service.h"
|
| #import "chrome/browser/cocoa/background_gradient_view.h"
|
| +#include "grit/generated_resources.h"
|
| #include "grit/theme_resources.h"
|
| #import "third_party/GTM/AppKit/GTMTheme.h"
|
|
|
| @@ -579,6 +582,19 @@ willPositionSheet:(NSWindow*)sheet
|
| case IDC_FULLSCREEN:
|
| enable &= [self supportsFullscreen];
|
| break;
|
| + case IDC_SYNC_BOOKMARKS:
|
| + {
|
| + Profile* profile = browser_->profile()->GetOriginalProfile();
|
| + ProfileSyncService* syncService = profile->GetProfileSyncService();
|
| + // TODO(timsteele): Need a ui helper method to just get the type
|
| + // without needing labels.
|
| + string16 label, link;
|
| + SyncStatusUIHelper::MessageType status =
|
| + SyncStatusUIHelper::GetLabels(syncService, &label, &link);
|
| + enable &= (syncService != NULL);
|
| + [self updateSyncItem:item syncEnabled:enable status:status];
|
| + }
|
| + break;
|
| default:
|
| // Special handling for the contents of the Text Encoding submenu. On
|
| // Mac OS, instead of enabling/disabling the top-level menu item, we
|
| @@ -599,6 +615,59 @@ willPositionSheet:(NSWindow*)sheet
|
| return enable;
|
| }
|
|
|
| +// TODO(akalin): We need to add a menu item to the main Chrome menu (near
|
| +// "Clear browsing data..."). However, this is tricky as no browsers may
|
| +// actually be open. Refactor the sync UI code so that it doesn't depend
|
| +// on a browser being present.
|
| +
|
| +- (void)updateSyncItem:(id)syncItem
|
| + syncEnabled:(BOOL)syncEnabled
|
| + status:(SyncStatusUIHelper::MessageType)status {
|
| + DCHECK([syncItem isKindOfClass:[NSMenuItem class]]);
|
| + NSMenuItem* syncMenuItem = (NSMenuItem*)syncItem;
|
| + // Look for a separator immediately after the menu item.
|
| + NSMenuItem* followingSeparator = nil;
|
| + NSMenu* menu = [syncItem menu];
|
| + if (menu) {
|
| + NSInteger syncItemIndex = [menu indexOfItem:syncMenuItem];
|
| + DCHECK_NE(syncItemIndex, -1);
|
| + if ((syncItemIndex + 1) < [menu numberOfItems]) {
|
| + NSMenuItem* menuItem = [menu itemAtIndex:(syncItemIndex + 1)];
|
| + if ([menuItem isSeparatorItem]) {
|
| + followingSeparator = menuItem;
|
| + }
|
| + }
|
| + }
|
| +
|
| + // TODO(akalin): consolidate this code with the equivalent Windows code in
|
| + // chrome/browser/views/toolbar_view.cc.
|
| + int titleId;
|
| + switch (status) {
|
| + case SyncStatusUIHelper::SYNCED:
|
| + titleId = IDS_SYNC_MENU_BOOKMARKS_SYNCED_LABEL;
|
| + break;
|
| + case SyncStatusUIHelper::SYNC_ERROR:
|
| + titleId = IDS_SYNC_MENU_BOOKMARK_SYNC_ERROR_LABEL;
|
| + break;
|
| + case SyncStatusUIHelper::PRE_SYNCED:
|
| + titleId = IDS_SYNC_START_SYNC_BUTTON_LABEL;
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + // Needed to prevent release-mode warnings.
|
| + titleId = IDS_SYNC_START_SYNC_BUTTON_LABEL;
|
| + break;
|
| + }
|
| + NSString* title = l10n_util::GetNSStringWithFixup(titleId);
|
| + [syncMenuItem setTitle:title];
|
| +
|
| + // If we don't have a sync service, hide any sync-related menu
|
| + // items. However, sync_menu_item is enabled/disabled outside of this
|
| + // function so we don't touch it here, and separators are always disabled.
|
| + [syncMenuItem setHidden:!syncEnabled];
|
| + [followingSeparator setHidden:!syncEnabled];
|
| +}
|
| +
|
| // Called when the user picks a menu or toolbar item when this window is key.
|
| // Calls through to the browser object to execute the command. This assumes that
|
| // the command is supported and doesn't check, otherwise it would have been
|
|
|