Index: chrome/browser/app_controller_mac.mm |
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm |
index 184b1969ac3a787ca2f66914b814c7218142ca65..81ea20c82121b5da901562daedd05e91a9866f36 100644 |
--- a/chrome/browser/app_controller_mac.mm |
+++ b/chrome/browser/app_controller_mac.mm |
@@ -15,6 +15,7 @@ |
#include "base/sys_string_conversions.h" |
#import "base/worker_pool_mac.h" |
#include "chrome/app/chrome_command_ids.h" |
+#include "chrome/browser/background_application_list_model.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/browser_shutdown.h" |
#include "chrome/browser/browser_thread.h" |
@@ -155,6 +156,7 @@ void RecordLastRunAppBundlePath() { |
- (void)showPreferencesWindow:(id)sender |
page:(OptionsPage)page |
profile:(Profile*)profile; |
+- (void)executeApplication:(id)sender; |
@end |
@implementation AppController |
@@ -938,9 +940,28 @@ void RecordLastRunAppBundlePath() { |
case IDC_OPTIONS: |
[self showPreferences:sender]; |
break; |
+ default: |
+ [self executeApplication:sender]; |
Andrew T Wilson (Slow)
2010/12/16 02:18:25
Is there any assert we could have here to make sur
The wrong rickcam account
2010/12/16 18:50:58
Done . . . provided that you like the approach tha
|
} |
} |
+// Run a (background) application in a new tab. |
+- (void)executeApplication:(id)sender { |
+ NSInteger tag = [sender tag]; |
+ Profile* profile = [self defaultProfile]; |
+ DCHECK(profile); |
+ BackgroundApplicationListModel applications(profile); |
+ DCHECK(tag >= 0 && |
+ tag < static_cast<int>(applications.size())); |
+ Browser* browser = BrowserList::GetLastActive(); |
+ if (!browser) { |
+ Browser::OpenEmptyWindow(profile); |
+ browser = BrowserList::GetLastActive(); |
+ } |
+ const Extension* extension = applications.GetExtension(tag); |
+ browser->OpenApplicationTab(profile, extension, NULL); |
+} |
+ |
// Same as |-commandDispatch:|, but executes commands using a disposition |
// determined by the key flags. This will get called in the case where the |
// frontmost window is not a browser window, and the user has command-clicked |
@@ -1179,11 +1200,37 @@ void RecordLastRunAppBundlePath() { |
- (NSMenu*)applicationDockMenu:(NSApplication*)sender { |
NSMenu* dockMenu = [[[NSMenu alloc] initWithTitle: @""] autorelease]; |
- NSString* titleStr = l10n_util::GetNSStringWithFixup(IDS_NEW_WINDOW_MAC); |
- scoped_nsobject<NSMenuItem> item([[NSMenuItem alloc] |
- initWithTitle:titleStr |
- action:@selector(newWindowFromDock:) |
- keyEquivalent:@""]); |
+ NSString* titleStr = NULL; |
Andrew T Wilson (Slow)
2010/12/16 02:18:25
Should we use nil instead of NULL here? Not sure a
The wrong rickcam account
2010/12/16 18:50:58
Yes. Well, as best as I can tell anyway. I didn'
|
+ scoped_nsobject<NSMenuItem> item(NULL); |
+ |
Andrew T Wilson (Slow)
2010/12/16 02:18:25
I was confused by us using titleStr/item up here a
The wrong rickcam account
2010/12/16 18:50:58
Done.
|
+ Profile* profile = [self defaultProfile]; |
+ DCHECK(profile); |
+ int position = 0; |
+ BackgroundApplicationListModel applications(profile); |
+ if (applications.begin() != applications.end()) { |
Andrew T Wilson (Slow)
2010/12/16 02:18:25
I wonder if it's cleaner to move the for loop outs
The wrong rickcam account
2010/12/16 18:50:58
Done. I saw the purpose as "avoiding the whole bl
|
+ for (ExtensionList::const_iterator cursor = applications.begin(); |
The wrong rickcam account
2010/12/16 01:22:26
Need to indent the following two lines a bit more.
|
+ cursor != applications.end(); |
+ ++cursor, ++position) { |
+ int sort_position = applications.GetPosition(*cursor); |
+ DCHECK(sort_position == position); |
Andrew T Wilson (Slow)
2010/12/16 02:18:25
I dimly recall talking about this before - why can
The wrong rickcam account
2010/12/16 18:50:58
Done. In fact, I think I missed that bit of clean
|
+ const std::string& name = (*cursor)->name(); |
+ string16 label = ASCIIToUTF16(name); |
Andrew T Wilson (Slow)
2010/12/16 02:18:25
This seems weird to me. Should this be UTF8ToUTF16
The wrong rickcam account
2010/12/16 18:50:58
Done.
|
+ titleStr = l10n_util::FixUpWindowsStyleLabel(label); |
Andrew T Wilson (Slow)
2010/12/16 02:18:25
I'm not sure that we should call this - I think th
The wrong rickcam account
2010/12/16 18:50:58
Done. Swtiched to base::SysUTF16ToNSString which
|
+ item.reset([[NSMenuItem alloc] initWithTitle:titleStr |
+ action:@selector(newWindowFromDock:) |
Andrew T Wilson (Slow)
2010/12/16 02:18:25
BTW, I'm wondering if newWindowFromDock should be
The wrong rickcam account
2010/12/16 18:50:58
Done.
|
+ keyEquivalent:@""]); |
+ [item setTarget:self]; |
+ [item setTag:position]; |
+ [dockMenu addItem:item]; |
+ } |
+ titleStr = l10n_util::GetNSStringWithFixup(IDS_NEW_WINDOW_MAC); |
Andrew T Wilson (Slow)
2010/12/16 02:18:25
Remove this superfluous set of titleStr.
The wrong rickcam account
2010/12/16 18:50:58
Done.
|
+ NSMenuItem* sepItem = [[NSMenuItem separatorItem] init]; |
+ [dockMenu addItem:sepItem]; |
+ } |
+ titleStr = l10n_util::GetNSStringWithFixup(IDS_NEW_WINDOW_MAC); |
+ item.reset([[NSMenuItem alloc] initWithTitle:titleStr |
+ action:@selector(newWindowFromDock:) |
+ keyEquivalent:@""]); |
[item setTarget:self]; |
[item setTag:IDC_NEW_WINDOW]; |
[dockMenu addItem:item]; |