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

Side by Side Diff: chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm

Issue 24153009: Add remaining items to Chrome App menus. (Mac) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 7 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.h" 5 #import "chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.h"
6 6
7 #include "apps/app_shim/extension_app_shim_handler_mac.h" 7 #include "apps/app_shim/extension_app_shim_handler_mac.h"
8 #include "apps/shell_window.h" 8 #include "apps/shell_window.h"
9 #include "apps/shell_window_registry.h" 9 #include "apps/shell_window_registry.h"
10 #include "base/strings/sys_string_conversions.h" 10 #include "base/strings/sys_string_conversions.h"
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 } 163 }
164 return self; 164 return self;
165 } 165 }
166 166
167 - (void)dealloc { 167 - (void)dealloc {
168 [[NSNotificationCenter defaultCenter] removeObserver:self]; 168 [[NSNotificationCenter defaultCenter] removeObserver:self];
169 [super dealloc]; 169 [super dealloc];
170 } 170 }
171 171
172 - (void)buildAppMenuItems { 172 - (void)buildAppMenuItems {
173 aboutDoppelganger_.reset([[DoppelgangerMenuItem alloc]
174 initWithController:self
175 menuTag:IDC_CHROME_MENU
176 itemTag:IDC_ABOUT
177 resourceId:IDS_ABOUT_MAC
178 action:nil
179 keyEquivalent:@""]);
Nico 2013/09/20 16:18:49 I'm wondering if there's some way to do this that
jackhou1 2013/09/21 00:53:05 I don't think that encodes enough information abou
173 hideDoppelganger_.reset([[DoppelgangerMenuItem alloc] 180 hideDoppelganger_.reset([[DoppelgangerMenuItem alloc]
174 initWithController:self 181 initWithController:self
175 menuTag:IDC_CHROME_MENU 182 menuTag:IDC_CHROME_MENU
176 itemTag:IDC_HIDE_APP 183 itemTag:IDC_HIDE_APP
177 resourceId:IDS_HIDE_APP_MAC 184 resourceId:IDS_HIDE_APP_MAC
178 action:@selector(hideCurrentPlatformApp) 185 action:@selector(hideCurrentPlatformApp)
179 keyEquivalent:@"h"]); 186 keyEquivalent:@"h"]);
180 quitDoppelganger_.reset([[DoppelgangerMenuItem alloc] 187 quitDoppelganger_.reset([[DoppelgangerMenuItem alloc]
181 initWithController:self 188 initWithController:self
182 menuTag:IDC_CHROME_MENU 189 menuTag:IDC_CHROME_MENU
183 itemTag:IDC_EXIT 190 itemTag:IDC_EXIT
184 resourceId:IDS_EXIT_MAC 191 resourceId:IDS_EXIT_MAC
185 action:@selector(quitCurrentPlatformApp) 192 action:@selector(quitCurrentPlatformApp)
186 keyEquivalent:@"q"]); 193 keyEquivalent:@"q"]);
194 newDoppelganger_.reset([[DoppelgangerMenuItem alloc]
195 initWithController:self
196 menuTag:IDC_FILE_MENU
197 itemTag:IDC_NEW_WINDOW
198 resourceId:0
199 action:nil
200 keyEquivalent:@"n"]);
201 // For apps, the "Window" part of "New Window" is dropped to match the default
202 // menu set given to Cocoa Apps.
203 [[newDoppelganger_ menuItem] setTitle:l10n_util::GetNSString(IDS_NEW_MAC)];
204 openDoppelganger_.reset([[DoppelgangerMenuItem alloc]
205 initWithController:self
206 menuTag:IDC_FILE_MENU
207 itemTag:IDC_OPEN_FILE
208 resourceId:0
209 action:nil
210 keyEquivalent:@"o"]);
187 allToFrontDoppelganger_.reset([[DoppelgangerMenuItem alloc] 211 allToFrontDoppelganger_.reset([[DoppelgangerMenuItem alloc]
188 initWithController:self 212 initWithController:self
189 menuTag:IDC_WINDOW_MENU 213 menuTag:IDC_WINDOW_MENU
190 itemTag:IDC_ALL_WINDOWS_FRONT 214 itemTag:IDC_ALL_WINDOWS_FRONT
191 resourceId:0 215 resourceId:0
192 action:@selector(focusCurrentPlatformApp) 216 action:@selector(focusCurrentPlatformApp)
193 keyEquivalent:@""]); 217 keyEquivalent:@""]);
194 218
195 // The app's menu. 219 // The app's menu.
196 appMenuItem_.reset([[NSMenuItem alloc] initWithTitle:@"" 220 appMenuItem_.reset([[NSMenuItem alloc] initWithTitle:@""
197 action:nil 221 action:nil
198 keyEquivalent:@""]); 222 keyEquivalent:@""]);
199 base::scoped_nsobject<NSMenu> appMenu([[NSMenu alloc] initWithTitle:@""]); 223 base::scoped_nsobject<NSMenu> appMenu([[NSMenu alloc] initWithTitle:@""]);
200 [appMenuItem_ setSubmenu:appMenu]; 224 [appMenuItem_ setSubmenu:appMenu];
201 [appMenu setAutoenablesItems:NO]; 225 [appMenu setAutoenablesItems:NO];
202 226
227 [appMenu addItem:[aboutDoppelganger_ menuItem]];
228 [[aboutDoppelganger_ menuItem] setEnabled:NO]; // Not implemented yet.
229 [appMenu addItem:[NSMenuItem separatorItem]];
203 [appMenu addItem:[hideDoppelganger_ menuItem]]; 230 [appMenu addItem:[hideDoppelganger_ menuItem]];
204 [appMenu addItem:[NSMenuItem separatorItem]]; 231 [appMenu addItem:[NSMenuItem separatorItem]];
205 [appMenu addItem:[quitDoppelganger_ menuItem]]; 232 [appMenu addItem:[quitDoppelganger_ menuItem]];
206 233
207 // File menu. 234 // File menu.
208 fileMenuItem_.reset([NewTopLevelItemFrom(IDC_FILE_MENU) retain]); 235 fileMenuItem_.reset([NewTopLevelItemFrom(IDC_FILE_MENU) retain]);
236 [[fileMenuItem_ submenu] addItem:[newDoppelganger_ menuItem]];
237 [[fileMenuItem_ submenu] addItem:[openDoppelganger_ menuItem]];
238 [[fileMenuItem_ submenu] addItem:[NSMenuItem separatorItem]];
209 AddDuplicateItem(fileMenuItem_, IDC_FILE_MENU, IDC_CLOSE_WINDOW); 239 AddDuplicateItem(fileMenuItem_, IDC_FILE_MENU, IDC_CLOSE_WINDOW);
210 240
211 // Edit menu. This is copied entirely. 241 // Edit menu. This copies the menu entirely and removes
242 // "Paste and Match Style" and "Find". This is because the last two items,
tapted 2013/09/20 06:48:00 no-op/optional: also I'd consider the sentence "Th
243 // "Start Dictation" and "Special Characters" are added by OSX, so we can't
244 // copy them explicitly.
212 editMenuItem_.reset([[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] copy]); 245 editMenuItem_.reset([[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] copy]);
246 NSMenu* editMenu = [editMenuItem_ submenu];
247 [editMenu removeItem:[editMenu
248 itemWithTag:IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE]];
249 [editMenu removeItem:[editMenu itemWithTag:IDC_FIND_MENU]];
213 250
214 // Window menu. 251 // Window menu.
215 windowMenuItem_.reset([NewTopLevelItemFrom(IDC_WINDOW_MENU) retain]); 252 windowMenuItem_.reset([NewTopLevelItemFrom(IDC_WINDOW_MENU) retain]);
216 AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_MINIMIZE_WINDOW); 253 AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_MINIMIZE_WINDOW);
217 AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_MAXIMIZE_WINDOW); 254 AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_MAXIMIZE_WINDOW);
218 [[windowMenuItem_ submenu] addItem:[NSMenuItem separatorItem]]; 255 [[windowMenuItem_ submenu] addItem:[NSMenuItem separatorItem]];
219 [[windowMenuItem_ submenu] addItem:[allToFrontDoppelganger_ menuItem]]; 256 [[windowMenuItem_ submenu] addItem:[allToFrontDoppelganger_ menuItem]];
220 } 257 }
221 258
222 - (void)registerEventHandlers { 259 - (void)registerEventHandlers {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 return; 307 return;
271 308
272 [self removeMenuItems:appId_]; 309 [self removeMenuItems:appId_];
273 appId_.reset([appId copy]); 310 appId_.reset([appId copy]);
274 311
275 // Hide Chrome menu items. 312 // Hide Chrome menu items.
276 NSMenu* mainMenu = [NSApp mainMenu]; 313 NSMenu* mainMenu = [NSApp mainMenu];
277 for (NSMenuItem* item in [mainMenu itemArray]) 314 for (NSMenuItem* item in [mainMenu itemArray])
278 [item setHidden:YES]; 315 [item setHidden:YES];
279 316
317 [aboutDoppelganger_ enableForApp:app];
280 [hideDoppelganger_ enableForApp:app]; 318 [hideDoppelganger_ enableForApp:app];
281 [quitDoppelganger_ enableForApp:app]; 319 [quitDoppelganger_ enableForApp:app];
320 [newDoppelganger_ enableForApp:app];
321 [openDoppelganger_ enableForApp:app];
282 322
283 [appMenuItem_ setTitle:appId]; 323 [appMenuItem_ setTitle:appId];
284 [[appMenuItem_ submenu] setTitle:title]; 324 [[appMenuItem_ submenu] setTitle:title];
285 325
286 [mainMenu addItem:appMenuItem_]; 326 [mainMenu addItem:appMenuItem_];
287 [mainMenu addItem:fileMenuItem_]; 327 [mainMenu addItem:fileMenuItem_];
288 [mainMenu addItem:editMenuItem_]; 328 [mainMenu addItem:editMenuItem_];
289 [mainMenu addItem:windowMenuItem_]; 329 [mainMenu addItem:windowMenuItem_];
290 } 330 }
291 331
292 - (void)removeMenuItems:(NSString*)appId { 332 - (void)removeMenuItems:(NSString*)appId {
293 if (![appId_ isEqualToString:appId]) 333 if (![appId_ isEqualToString:appId])
294 return; 334 return;
295 335
296 appId_.reset(); 336 appId_.reset();
297 337
298 NSMenu* mainMenu = [NSApp mainMenu]; 338 NSMenu* mainMenu = [NSApp mainMenu];
299 [mainMenu removeItem:appMenuItem_]; 339 [mainMenu removeItem:appMenuItem_];
300 [mainMenu removeItem:fileMenuItem_]; 340 [mainMenu removeItem:fileMenuItem_];
301 [mainMenu removeItem:editMenuItem_]; 341 [mainMenu removeItem:editMenuItem_];
302 [mainMenu removeItem:windowMenuItem_]; 342 [mainMenu removeItem:windowMenuItem_];
303 343
304 // Restore the Chrome main menu bar. 344 // Restore the Chrome main menu bar.
305 for (NSMenuItem* item in [mainMenu itemArray]) 345 for (NSMenuItem* item in [mainMenu itemArray])
306 [item setHidden:NO]; 346 [item setHidden:NO];
307 347
348 [aboutDoppelganger_ disable];
308 [hideDoppelganger_ disable]; 349 [hideDoppelganger_ disable];
309 [quitDoppelganger_ disable]; 350 [quitDoppelganger_ disable];
351 [newDoppelganger_ disable];
352 [openDoppelganger_ disable];
310 } 353 }
311 354
312 - (void)quitCurrentPlatformApp { 355 - (void)quitCurrentPlatformApp {
313 apps::ShellWindow* shellWindow = 356 apps::ShellWindow* shellWindow =
314 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile( 357 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile(
315 [NSApp keyWindow]); 358 [NSApp keyWindow]);
316 if (shellWindow) 359 if (shellWindow)
317 apps::ExtensionAppShimHandler::QuitAppForWindow(shellWindow); 360 apps::ExtensionAppShimHandler::QuitAppForWindow(shellWindow);
318 } 361 }
319 362
320 - (void)hideCurrentPlatformApp { 363 - (void)hideCurrentPlatformApp {
321 apps::ShellWindow* shellWindow = 364 apps::ShellWindow* shellWindow =
322 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile( 365 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile(
323 [NSApp keyWindow]); 366 [NSApp keyWindow]);
324 if (shellWindow) 367 if (shellWindow)
325 apps::ExtensionAppShimHandler::HideAppForWindow(shellWindow); 368 apps::ExtensionAppShimHandler::HideAppForWindow(shellWindow);
326 } 369 }
327 370
328 - (void)focusCurrentPlatformApp { 371 - (void)focusCurrentPlatformApp {
329 apps::ShellWindow* shellWindow = 372 apps::ShellWindow* shellWindow =
330 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile( 373 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile(
331 [NSApp keyWindow]); 374 [NSApp keyWindow]);
332 if (shellWindow) 375 if (shellWindow)
333 apps::ExtensionAppShimHandler::FocusAppForWindow(shellWindow); 376 apps::ExtensionAppShimHandler::FocusAppForWindow(shellWindow);
334 } 377 }
335 378
336 @end 379 @end
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698