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

Unified Diff: chrome/browser/app_controller_mac.mm

Issue 11906008: Make Mac menu code obey incognito availability. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: adjust comment Created 7 years, 11 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
« no previous file with comments | « chrome/browser/app_controller_mac.h ('k') | chrome/browser/ui/browser_command_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/app_controller_mac.mm
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index 28fec393d6cf91e861f2cd0ca6afcd29add87baa..b5d026d21c506f1641c336b9c369d36b0441bbd1 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -38,6 +38,7 @@
#include "chrome/browser/sync/profile_sync_service.h"
#include "chrome/browser/sync/sync_ui_util.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_list.h"
@@ -522,6 +523,18 @@ void RecordLastRunAppBundlePath() {
historyMenuBridge_.reset(new HistoryMenuBridge(lastProfile_));
historyMenuBridge_->BuildMenu();
+
+ chrome::BrowserCommandController::
+ UpdateSharedCommandsForIncognitoAvailability(
+ menuState_.get(), lastProfile_);
+ profilePrefRegistrar_.reset(new PrefChangeRegistrar());
+ profilePrefRegistrar_->Init(lastProfile_->GetPrefs());
+ profilePrefRegistrar_->Add(
+ prefs::kIncognitoModeAvailability,
+ base::Bind(&chrome::BrowserCommandController::
+ UpdateSharedCommandsForIncognitoAvailability,
+ menuState_.get(),
+ lastProfile_));
}
- (void)checkForAnyKeyWindows {
@@ -598,6 +611,15 @@ void RecordLastRunAppBundlePath() {
if (!parsed_command_line.HasSwitch(switches::kEnableExposeForTabs)) {
[tabposeMenuItem_ setHidden:YES];
}
+
+ PrefService* localState = g_browser_process->local_state();
+ if (localState) {
+ localPrefRegistrar_.Init(localState);
+ localPrefRegistrar_.Add(
+ prefs::kAllowFileSelectionDialogs,
+ base::Bind(&chrome::BrowserCommandController::UpdateOpenFileState,
+ menuState_.get()));
+ }
}
// This is called after profiles have been loaded and preferences registered.
@@ -692,15 +714,18 @@ void RecordLastRunAppBundlePath() {
return service && !service->entries().empty();
}
-// Returns true if there is not a modal window (either window- or application-
+// Returns true if there is a modal window (either window- or application-
// modal) blocking the active browser. Note that tab modal dialogs (HTTP auth
// sheets) will not count as blocking the browser. But things like open/save
// dialogs that are window modal will block the browser.
-- (BOOL)keyWindowIsNotModal {
+- (BOOL)keyWindowIsModal {
+ if ([NSApp modalWindow])
+ return YES;
+
Browser* browser = chrome::GetLastActiveBrowser();
- return [NSApp modalWindow] == nil && (!browser ||
- ![[browser->window()->GetNativeWindow() attachedSheet]
- isKindOfClass:[NSWindow class]]);
+ return browser &&
+ [[browser->window()->GetNativeWindow() attachedSheet]
+ isKindOfClass:[NSWindow class]];
}
// Called to validate menu items when there are no key windows. All the
@@ -712,9 +737,11 @@ void RecordLastRunAppBundlePath() {
- (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)item {
SEL action = [item action];
BOOL enable = NO;
- if (action == @selector(commandDispatch:)) {
+ if (action == @selector(commandDispatch:) ||
+ action == @selector(commandFromDock:)) {
NSInteger tag = [item tag];
- if (menuState_->SupportsCommand(tag)) {
+ if (menuState_ && // NULL in tests.
+ menuState_->SupportsCommand(tag)) {
switch (tag) {
// The File Menu commands are not automatically disabled by Cocoa when a
// dialog sheet obscures the browser window, so we disable several of
@@ -722,7 +749,7 @@ void RecordLastRunAppBundlePath() {
// app_controller is only activated when there are no key windows (see
// function comment).
case IDC_RESTORE_TAB:
- enable = [self keyWindowIsNotModal] && [self canRestoreTab];
+ enable = ![self keyWindowIsModal] && [self canRestoreTab];
break;
// Browser-level items that open in new tabs should not open if there's
// a window- or app-modal dialog.
@@ -730,14 +757,13 @@ void RecordLastRunAppBundlePath() {
case IDC_NEW_TAB:
case IDC_SHOW_HISTORY:
case IDC_SHOW_BOOKMARK_MANAGER:
- enable = [self keyWindowIsNotModal];
+ enable = ![self keyWindowIsModal];
break;
// Browser-level items that open in new windows.
- case IDC_NEW_WINDOW:
case IDC_TASK_MANAGER:
// Allow the user to open a new window if there's a window-modal
// dialog.
- enable = [self keyWindowIsNotModal] || ([NSApp modalWindow] == nil);
+ enable = ![self keyWindowIsModal];
break;
case IDC_SHOW_SYNC_SETUP: {
Profile* lastProfile = [self lastProfile];
@@ -753,7 +779,7 @@ void RecordLastRunAppBundlePath() {
break;
}
enable = lastProfile->IsSyncAccessible() &&
- [self keyWindowIsNotModal];
+ ![self keyWindowIsModal];
[BrowserWindowController updateSigninItem:item
shouldShow:enable
currentProfile:lastProfile];
@@ -764,7 +790,7 @@ void RecordLastRunAppBundlePath() {
break;
default:
enable = menuState_->IsCommandEnabled(tag) ?
- [self keyWindowIsNotModal] : NO;
+ ![self keyWindowIsModal] : NO;
}
}
} else if (action == @selector(terminate:)) {
@@ -1235,6 +1261,7 @@ void RecordLastRunAppBundlePath() {
keyEquivalent:@""]);
[item setTarget:self];
[item setTag:IDC_NEW_WINDOW];
+ [item setEnabled:[self validateUserInterfaceItem:item]];
[dockMenu addItem:item];
titleStr = l10n_util::GetNSStringWithFixup(IDS_NEW_INCOGNITO_WINDOW_MAC);
@@ -1244,6 +1271,7 @@ void RecordLastRunAppBundlePath() {
keyEquivalent:@""]);
[item setTarget:self];
[item setTag:IDC_NEW_INCOGNITO_WINDOW];
+ [item setEnabled:[self validateUserInterfaceItem:item]];
[dockMenu addItem:item];
// TODO(rickcam): Mock out BackgroundApplicationListModel, then add unit
« no previous file with comments | « chrome/browser/app_controller_mac.h ('k') | chrome/browser/ui/browser_command_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698