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

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: 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:@""]);
180 [[aboutDoppelganger_ menuItem] setEnabled:NO]; // Not implemented yet.
173 hideDoppelganger_.reset([[DoppelgangerMenuItem alloc] 181 hideDoppelganger_.reset([[DoppelgangerMenuItem alloc]
174 initWithController:self 182 initWithController:self
175 menuTag:IDC_CHROME_MENU 183 menuTag:IDC_CHROME_MENU
176 itemTag:IDC_HIDE_APP 184 itemTag:IDC_HIDE_APP
177 resourceId:IDS_HIDE_APP_MAC 185 resourceId:IDS_HIDE_APP_MAC
178 action:@selector(hideCurrentPlatformApp) 186 action:@selector(hideCurrentPlatformApp)
179 keyEquivalent:@"h"]); 187 keyEquivalent:@"h"]);
180 quitDoppelganger_.reset([[DoppelgangerMenuItem alloc] 188 quitDoppelganger_.reset([[DoppelgangerMenuItem alloc]
181 initWithController:self 189 initWithController:self
182 menuTag:IDC_CHROME_MENU 190 menuTag:IDC_CHROME_MENU
183 itemTag:IDC_EXIT 191 itemTag:IDC_EXIT
184 resourceId:IDS_EXIT_MAC 192 resourceId:IDS_EXIT_MAC
185 action:@selector(quitCurrentPlatformApp) 193 action:@selector(quitCurrentPlatformApp)
186 keyEquivalent:@"q"]); 194 keyEquivalent:@"q"]);
195 newDoppelganger_.reset([[DoppelgangerMenuItem alloc]
tapted 2013/09/18 07:11:45 should this be setEnabled:NO as well? Same for Ope
jackhou1 2013/09/19 03:05:05 Not needed because only appMenuItem_ has autoenabl
196 initWithController:self
197 menuTag:IDC_FILE_MENU
198 itemTag:IDC_NEW_WINDOW
199 resourceId:0
200 action:nil
201 keyEquivalent:@"n"]);
202 [[newDoppelganger_ menuItem] setTitle:l10n_util::GetNSString(IDS_NEW_MAC)];
tapted 2013/09/18 07:11:45 Maybe a comment here, saying that, for apps, the "
jackhou1 2013/09/19 03:05:05 Done.
203 openDoppelganger_.reset([[DoppelgangerMenuItem alloc]
204 initWithController:self
205 menuTag:IDC_FILE_MENU
206 itemTag:IDC_OPEN_FILE
207 resourceId:0
208 action:nil
209 keyEquivalent:@"o"]);
187 allToFrontDoppelganger_.reset([[DoppelgangerMenuItem alloc] 210 allToFrontDoppelganger_.reset([[DoppelgangerMenuItem alloc]
188 initWithController:self 211 initWithController:self
189 menuTag:IDC_WINDOW_MENU 212 menuTag:IDC_WINDOW_MENU
190 itemTag:IDC_ALL_WINDOWS_FRONT 213 itemTag:IDC_ALL_WINDOWS_FRONT
191 resourceId:0 214 resourceId:0
192 action:@selector(focusCurrentPlatformApp) 215 action:@selector(focusCurrentPlatformApp)
193 keyEquivalent:@""]); 216 keyEquivalent:@""]);
194 217
195 // The app's menu. 218 // The app's menu.
196 appMenuItem_.reset([[NSMenuItem alloc] initWithTitle:@"" 219 appMenuItem_.reset([[NSMenuItem alloc] initWithTitle:@""
197 action:nil 220 action:nil
198 keyEquivalent:@""]); 221 keyEquivalent:@""]);
199 base::scoped_nsobject<NSMenu> appMenu([[NSMenu alloc] initWithTitle:@""]); 222 base::scoped_nsobject<NSMenu> appMenu([[NSMenu alloc] initWithTitle:@""]);
200 [appMenuItem_ setSubmenu:appMenu]; 223 [appMenuItem_ setSubmenu:appMenu];
201 [appMenu setAutoenablesItems:NO]; 224 [appMenu setAutoenablesItems:NO];
202 225
226 [appMenu addItem:[aboutDoppelganger_ menuItem]];
227 [appMenu addItem:[NSMenuItem separatorItem]];
203 [appMenu addItem:[hideDoppelganger_ menuItem]]; 228 [appMenu addItem:[hideDoppelganger_ menuItem]];
204 [appMenu addItem:[NSMenuItem separatorItem]]; 229 [appMenu addItem:[NSMenuItem separatorItem]];
205 [appMenu addItem:[quitDoppelganger_ menuItem]]; 230 [appMenu addItem:[quitDoppelganger_ menuItem]];
206 231
207 // File menu. 232 // File menu.
208 fileMenuItem_.reset([NewTopLevelItemFrom(IDC_FILE_MENU) retain]); 233 fileMenuItem_.reset([NewTopLevelItemFrom(IDC_FILE_MENU) retain]);
234 [[fileMenuItem_ submenu] addItem:[newDoppelganger_ menuItem]];
235 [[fileMenuItem_ submenu] addItem:[openDoppelganger_ menuItem]];
236 [[fileMenuItem_ submenu] addItem:[NSMenuItem separatorItem]];
209 AddDuplicateItem(fileMenuItem_, IDC_FILE_MENU, IDC_CLOSE_WINDOW); 237 AddDuplicateItem(fileMenuItem_, IDC_FILE_MENU, IDC_CLOSE_WINDOW);
210 238
211 // Edit menu. This is copied entirely. 239 // Edit menu. This copies the menu entirely and removes
240 // "Paste and Match Style" and "Find". This is because the last two items,
241 // "Start Dictation" and "Special Characters" are added by OSX, so we can copy
tapted 2013/09/18 07:11:45 This comment doesn't make clear to me the connecti
jackhou1 2013/09/19 03:05:05 Oops, it should say "can't copy them".
242 // them explicitly.
212 editMenuItem_.reset([[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] copy]); 243 editMenuItem_.reset([[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] copy]);
244 NSMenu* editMenu = [editMenuItem_ submenu];
245 [editMenu removeItem:[editMenu
246 itemWithTag:IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE]];
247 [editMenu removeItem:[editMenu itemWithTag:IDC_FIND_MENU]];
213 248
214 // Window menu. 249 // Window menu.
215 windowMenuItem_.reset([NewTopLevelItemFrom(IDC_WINDOW_MENU) retain]); 250 windowMenuItem_.reset([NewTopLevelItemFrom(IDC_WINDOW_MENU) retain]);
216 AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_MINIMIZE_WINDOW); 251 AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_MINIMIZE_WINDOW);
217 AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_MAXIMIZE_WINDOW); 252 AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_MAXIMIZE_WINDOW);
218 [[windowMenuItem_ submenu] addItem:[NSMenuItem separatorItem]]; 253 [[windowMenuItem_ submenu] addItem:[NSMenuItem separatorItem]];
219 [[windowMenuItem_ submenu] addItem:[allToFrontDoppelganger_ menuItem]]; 254 [[windowMenuItem_ submenu] addItem:[allToFrontDoppelganger_ menuItem]];
220 } 255 }
221 256
222 - (void)registerEventHandlers { 257 - (void)registerEventHandlers {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 return; 305 return;
271 306
272 [self removeMenuItems:appId_]; 307 [self removeMenuItems:appId_];
273 appId_.reset([appId copy]); 308 appId_.reset([appId copy]);
274 309
275 // Hide Chrome menu items. 310 // Hide Chrome menu items.
276 NSMenu* mainMenu = [NSApp mainMenu]; 311 NSMenu* mainMenu = [NSApp mainMenu];
277 for (NSMenuItem* item in [mainMenu itemArray]) 312 for (NSMenuItem* item in [mainMenu itemArray])
278 [item setHidden:YES]; 313 [item setHidden:YES];
279 314
315 [aboutDoppelganger_ enableForApp:app];
280 [hideDoppelganger_ enableForApp:app]; 316 [hideDoppelganger_ enableForApp:app];
281 [quitDoppelganger_ enableForApp:app]; 317 [quitDoppelganger_ enableForApp:app];
318 [newDoppelganger_ enableForApp:app];
319 [openDoppelganger_ enableForApp:app];
282 320
283 [appMenuItem_ setTitle:appId]; 321 [appMenuItem_ setTitle:appId];
284 [[appMenuItem_ submenu] setTitle:title]; 322 [[appMenuItem_ submenu] setTitle:title];
285 323
286 [mainMenu addItem:appMenuItem_]; 324 [mainMenu addItem:appMenuItem_];
287 [mainMenu addItem:fileMenuItem_]; 325 [mainMenu addItem:fileMenuItem_];
288 [mainMenu addItem:editMenuItem_]; 326 [mainMenu addItem:editMenuItem_];
289 [mainMenu addItem:windowMenuItem_]; 327 [mainMenu addItem:windowMenuItem_];
290 } 328 }
291 329
292 - (void)removeMenuItems:(NSString*)appId { 330 - (void)removeMenuItems:(NSString*)appId {
293 if (![appId_ isEqualToString:appId]) 331 if (![appId_ isEqualToString:appId])
294 return; 332 return;
295 333
296 appId_.reset(); 334 appId_.reset();
297 335
298 NSMenu* mainMenu = [NSApp mainMenu]; 336 NSMenu* mainMenu = [NSApp mainMenu];
299 [mainMenu removeItem:appMenuItem_]; 337 [mainMenu removeItem:appMenuItem_];
300 [mainMenu removeItem:fileMenuItem_]; 338 [mainMenu removeItem:fileMenuItem_];
301 [mainMenu removeItem:editMenuItem_]; 339 [mainMenu removeItem:editMenuItem_];
302 [mainMenu removeItem:windowMenuItem_]; 340 [mainMenu removeItem:windowMenuItem_];
303 341
304 // Restore the Chrome main menu bar. 342 // Restore the Chrome main menu bar.
305 for (NSMenuItem* item in [mainMenu itemArray]) 343 for (NSMenuItem* item in [mainMenu itemArray])
306 [item setHidden:NO]; 344 [item setHidden:NO];
307 345
346 [aboutDoppelganger_ disable];
308 [hideDoppelganger_ disable]; 347 [hideDoppelganger_ disable];
309 [quitDoppelganger_ disable]; 348 [quitDoppelganger_ disable];
349 [newDoppelganger_ disable];
350 [openDoppelganger_ disable];
310 } 351 }
311 352
312 - (void)quitCurrentPlatformApp { 353 - (void)quitCurrentPlatformApp {
313 apps::ShellWindow* shellWindow = 354 apps::ShellWindow* shellWindow =
314 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile( 355 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile(
315 [NSApp keyWindow]); 356 [NSApp keyWindow]);
316 if (shellWindow) 357 if (shellWindow)
317 apps::ExtensionAppShimHandler::QuitAppForWindow(shellWindow); 358 apps::ExtensionAppShimHandler::QuitAppForWindow(shellWindow);
318 } 359 }
319 360
320 - (void)hideCurrentPlatformApp { 361 - (void)hideCurrentPlatformApp {
321 apps::ShellWindow* shellWindow = 362 apps::ShellWindow* shellWindow =
322 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile( 363 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile(
323 [NSApp keyWindow]); 364 [NSApp keyWindow]);
324 if (shellWindow) 365 if (shellWindow)
325 apps::ExtensionAppShimHandler::HideAppForWindow(shellWindow); 366 apps::ExtensionAppShimHandler::HideAppForWindow(shellWindow);
326 } 367 }
327 368
328 - (void)focusCurrentPlatformApp { 369 - (void)focusCurrentPlatformApp {
329 apps::ShellWindow* shellWindow = 370 apps::ShellWindow* shellWindow =
330 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile( 371 apps::ShellWindowRegistry::GetShellWindowForNativeWindowAnyProfile(
331 [NSApp keyWindow]); 372 [NSApp keyWindow]);
332 if (shellWindow) 373 if (shellWindow)
333 apps::ExtensionAppShimHandler::FocusAppForWindow(shellWindow); 374 apps::ExtensionAppShimHandler::FocusAppForWindow(shellWindow);
334 } 375 }
335 376
336 @end 377 @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