summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/app/nibs/HungRendererDialog.xib194
-rw-r--r--chrome/browser/cocoa/hung_renderer_controller.h7
-rw-r--r--chrome/browser/cocoa/hung_renderer_controller.mm12
-rw-r--r--chrome/browser/cocoa/multi_key_equivalent_button.h35
-rw-r--r--chrome/browser/cocoa/multi_key_equivalent_button.mm33
-rwxr-xr-xchrome/chrome.gyp2
6 files changed, 148 insertions, 135 deletions
diff --git a/chrome/app/nibs/HungRendererDialog.xib b/chrome/app/nibs/HungRendererDialog.xib
index 6aed9c3..4428c2a 100644
--- a/chrome/app/nibs/HungRendererDialog.xib
+++ b/chrome/app/nibs/HungRendererDialog.xib
@@ -1,11 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
- <string key="IBDocument.SystemVersion">9L30</string>
- <string key="IBDocument.InterfaceBuilderVersion">677</string>
- <string key="IBDocument.AppKitVersion">949.54</string>
- <string key="IBDocument.HIToolboxVersion">353.00</string>
+ <string key="IBDocument.SystemVersion">10B504</string>
+ <string key="IBDocument.InterfaceBuilderVersion">732</string>
+ <string key="IBDocument.AppKitVersion">1038.2</string>
+ <string key="IBDocument.HIToolboxVersion">437.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">732</string>
+ </object>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="1"/>
@@ -16,7 +20,7 @@
</object>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
+ <object class="NSArray" key="dict.sortedKeys" id="0">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
@@ -42,7 +46,7 @@
<string key="NSWindowTitle">^IDS_PRODUCT_NAME</string>
<string key="NSWindowClass">NSWindow</string>
<nil key="NSViewClass"/>
- <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
<object class="NSView" key="NSWindowView" id="1006">
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
@@ -73,16 +77,16 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTableColumn" id="171324652">
<string key="NSIdentifier">title</string>
- <double key="NSWidth">3.470000e+02</double>
- <double key="NSMinWidth">4.000000e+01</double>
- <double key="NSMaxWidth">1.000000e+03</double>
+ <double key="NSWidth">347</double>
+ <double key="NSMinWidth">40</double>
+ <double key="NSMaxWidth">1000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628032</int>
- <int key="NSCellFlags2">0</int>
+ <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags2">2048</int>
<string key="NSContents"/>
<object class="NSFont" key="NSSupport" id="26">
<string key="NSName">LucidaGrande</string>
- <double key="NSSize">1.100000e+01</double>
+ <double key="NSSize">11</double>
<int key="NSfFlags">3100</int>
</object>
<object class="NSColor" key="NSBackgroundColor">
@@ -111,7 +115,7 @@
<string key="NSColorName">controlColor</string>
<object class="NSColor" key="NSColor" id="97073632">
<int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
<object class="NSColor" key="NSTextColor">
@@ -127,8 +131,8 @@
<reference key="NSTableView" ref="216923421"/>
</object>
</object>
- <double key="NSIntercellSpacingWidth">3.000000e+00</double>
- <double key="NSIntercellSpacingHeight">2.000000e+00</double>
+ <double key="NSIntercellSpacingWidth">3</double>
+ <double key="NSIntercellSpacingHeight">2</double>
<object class="NSColor" key="NSBackgroundColor" id="661710842">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
@@ -142,12 +146,15 @@
<bytes key="NSWhite">MC41AA</bytes>
</object>
</object>
- <double key="NSRowHeight">1.700000e+01</double>
+ <double key="NSRowHeight">17</double>
<int key="NSTvFlags">37748736</int>
+ <reference key="NSDelegate"/>
+ <reference key="NSDataSource"/>
<int key="NSColumnAutoresizingStyle">4</int>
<int key="NSDraggingSourceMaskForLocal">15</int>
<int key="NSDraggingSourceMaskForNonLocal">0</int>
<bool key="NSAllowsTypeSelect">NO</bool>
+ <int key="NSTableViewDraggingDestinationStyle">0</int>
</object>
</object>
<string key="NSFrame">{{1, 1}, {350, 110}}</string>
@@ -169,7 +176,7 @@
<reference key="NSSuperview" ref="501203135"/>
<reference key="NSTarget" ref="501203135"/>
<string key="NSAction">_doScroller:</string>
- <double key="NSPercent">9.933775e-01</double>
+ <double key="NSPercent">0.99337750000000002</double>
</object>
<object class="NSScroller" id="1056817388">
<reference key="NSNextResponder" ref="501203135"/>
@@ -179,7 +186,7 @@
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="501203135"/>
<string key="NSAction">_doScroller:</string>
- <double key="NSPercent">9.976415e-01</double>
+ <double key="NSPercent">0.99764149999999996</double>
</object>
</object>
<string key="NSFrame">{{128, 60}, {352, 112}}</string>
@@ -203,7 +210,7 @@
<string key="NSContents">^IDS_BROWSER_HANGMONITOR_RENDERER</string>
<object class="NSFont" key="NSSupport" id="832152429">
<string key="NSName">LucidaGrande</string>
- <double key="NSSize">1.300000e+01</double>
+ <double key="NSSize">13</double>
<int key="NSfFlags">1044</int>
</object>
<reference key="NSControlView" ref="777888236"/>
@@ -226,7 +233,7 @@
<int key="NSvFlags">268</int>
<object class="NSMutableSet" key="NSDragTypes">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableArray" key="set.sortedObjects">
+ <object class="NSArray" key="set.sortedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>Apple PDF pasteboard type</string>
<string>Apple PICT pasteboard type</string>
@@ -269,7 +276,7 @@
<int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
@@ -304,7 +311,7 @@
<reference key="NSSuperview"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
- <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
</object>
<object class="NSCustomObject" id="264757785">
<string key="NSClassName">ChromeUILocalizer</string>
@@ -426,28 +433,26 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
- <object class="NSArray" key="object" id="1002">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <reference key="object" ref="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="1001"/>
- <reference key="parent" ref="1002"/>
- <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="1003"/>
- <reference key="parent" ref="1002"/>
+ <reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1004"/>
- <reference key="parent" ref="1002"/>
+ <reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
@@ -457,7 +462,7 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="1006"/>
</object>
- <reference key="parent" ref="1002"/>
+ <reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2</int>
@@ -548,8 +553,8 @@
<reference key="object" ref="218473211"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="544568006"/>
<reference ref="485103160"/>
+ <reference ref="544568006"/>
</object>
<reference key="parent" ref="1006"/>
</object>
@@ -584,18 +589,18 @@
<object class="IBObjectRecord">
<int key="objectID">37</int>
<reference key="object" ref="264757785"/>
- <reference key="parent" ref="1002"/>
+ <reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">38</int>
<reference key="object" ref="654098324"/>
- <reference key="parent" ref="1002"/>
+ <reference key="parent" ref="0"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableArray" key="dict.sortedKeys">
+ <object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.IBPluginDependency</string>
<string>-2.IBPluginDependency</string>
@@ -608,6 +613,7 @@
<string>1.editorWindowContentRectSynchronizationRect</string>
<string>12.IBPluginDependency</string>
<string>13.IBPluginDependency</string>
+ <string>14.CustomClassName</string>
<string>14.IBPluginDependency</string>
<string>15.IBPluginDependency</string>
<string>2.IBPluginDependency</string>
@@ -637,6 +643,7 @@
<string>{{357, 418}, {480, 270}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>MultiKeyEquivalentButton</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -656,9 +663,7 @@
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <reference key="dict.sortedKeys" ref="0"/>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
@@ -666,9 +671,7 @@
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <reference key="dict.sortedKeys" ref="0"/>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
@@ -677,88 +680,14 @@
<int key="maxID">41</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
- <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
- <string key="className">ChromeUILocalizer</string>
- <string key="superclassName">GTMUILocalizer</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">browser/cocoa/ui_localizer.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">GTMUILocalizer</string>
- <string key="superclassName">NSObject</string>
- <object class="NSMutableDictionary" key="outlets">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>otherObjectToLocalize_</string>
- <string>owner_</string>
- <string>yetAnotherObjectToLocalize_</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">../third_party/GTM/AppKit/GTMUILocalizer.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">GTMUILocalizerAndLayoutTweaker</string>
- <string key="superclassName">NSObject</string>
- <object class="NSMutableDictionary" key="outlets">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>localizerOwner_</string>
- <string>localizer_</string>
- <string>uiObject_</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>id</string>
- <string>GTMUILocalizer</string>
- <string>id</string>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="525261727">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">../third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">GTMWidthBasedTweaker</string>
- <string key="superclassName">NSView</string>
- <object class="NSMutableDictionary" key="outlets">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>viewToResize_</string>
- <string>viewToSlideAndResize_</string>
- <string>viewToSlide_</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>id</string>
- <string>NSView</string>
- <string>NSView</string>
- </object>
- </object>
- <reference key="sourceIdentifier" ref="525261727"/>
- </object>
- <object class="IBPartialClassDescription">
<string key="className">HungRendererController</string>
<string key="superclassName">NSWindowController</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableArray" key="dict.sortedKeys">
+ <object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>kill:</string>
<string>wait:</string>
@@ -771,7 +700,7 @@
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableArray" key="dict.sortedKeys">
+ <object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>imageView_</string>
<string>killButton_</string>
@@ -785,31 +714,34 @@
<string>NSButton</string>
<string>NSTextField</string>
<string>NSTableView</string>
- <string>NSButton</string>
+ <string>MultiKeyEquivalentButton</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">browser/cocoa/hung_renderer_controller.h</string>
+ <string key="majorKey">IBDocumentRelativeSource</string>
+ <string key="minorKey">../../browser/cocoa/hung_renderer_controller.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
+ <string key="className">MultiKeyEquivalentButton</string>
+ <string key="superclassName">NSButton</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">browser/cocoa/status_bubble_mac.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">browser/cocoa/tab_strip_model_observer_bridge.h</string>
+ <string key="majorKey">IBDocumentRelativeSource</string>
+ <string key="minorKey">../../browser/cocoa/multi_key_equivalent_button.h</string>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <integer value="1050" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+ <integer value="3000" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<string key="IBDocument.LastKnownRelativeProjectPath">../../chrome.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
diff --git a/chrome/browser/cocoa/hung_renderer_controller.h b/chrome/browser/cocoa/hung_renderer_controller.h
index 593cf25..9b890c7 100644
--- a/chrome/browser/cocoa/hung_renderer_controller.h
+++ b/chrome/browser/cocoa/hung_renderer_controller.h
@@ -23,9 +23,12 @@
#import "base/cocoa_protocols_mac.h"
+@class MultiKeyEquivalentButton;
+class TabContents;
+
@interface HungRendererController : NSWindowController<NSTableViewDataSource> {
@private
- IBOutlet NSButton* waitButton_;
+ IBOutlet MultiKeyEquivalentButton* waitButton_;
IBOutlet NSButton* killButton_;
IBOutlet NSTableView* tableView_;
IBOutlet NSImageView* imageView_;
@@ -63,7 +66,7 @@
@interface HungRendererController (JustForTesting)
- (NSButton*)killButton;
-- (NSButton*)waitButton;
+- (MultiKeyEquivalentButton*)waitButton;
@end
#endif // CHROME_BROWSER_COCOA_HUNG_RENDERER_CONTROLLER_H_
diff --git a/chrome/browser/cocoa/hung_renderer_controller.mm b/chrome/browser/cocoa/hung_renderer_controller.mm
index 54c4c9d..8967389 100644
--- a/chrome/browser/cocoa/hung_renderer_controller.mm
+++ b/chrome/browser/cocoa/hung_renderer_controller.mm
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#import "chrome/browser/cocoa/hung_renderer_controller.h"
+
#import <Cocoa/Cocoa.h>
#include "app/resource_bundle.h"
@@ -11,7 +13,7 @@
#include "base/sys_string_conversions.h"
#include "chrome/browser/browser_list.h"
#include "chrome/browser/hung_renderer_dialog.h"
-#import "chrome/browser/cocoa/hung_renderer_controller.h"
+#import "chrome/browser/cocoa/multi_key_equivalent_button.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/logging_chrome.h"
#include "chrome/common/result_codes.h"
@@ -63,6 +65,12 @@ HungRendererController* g_instance = NULL;
[GTMUILocalizerAndLayoutTweaker
resizeWindowWithoutAutoResizingSubViews:[self window]
delta:windowDelta];
+
+ // Make the "wait" button respond to additional keys. By setting this to
+ // @"\e", it will respond to both Esc and Command-. (period).
+ KeyEquivalentAndModifierMask key;
+ key.charCode = @"\e";
+ [waitButton_ addKeyEquivalent:key];
}
- (IBAction)kill:(id)sender {
@@ -135,7 +143,7 @@ HungRendererController* g_instance = NULL;
return killButton_;
}
-- (NSButton*)waitButton {
+- (MultiKeyEquivalentButton*)waitButton {
return waitButton_;
}
@end
diff --git a/chrome/browser/cocoa/multi_key_equivalent_button.h b/chrome/browser/cocoa/multi_key_equivalent_button.h
new file mode 100644
index 0000000..4d2c3b6
--- /dev/null
+++ b/chrome/browser/cocoa/multi_key_equivalent_button.h
@@ -0,0 +1,35 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_COCOA_MULTI_KEY_EQUIVALENT_BUTTON_H_
+#define CHROME_BROWSER_COCOA_MULTI_KEY_EQUIVALENT_BUTTON_H_
+
+#import <AppKit/AppKit.h>
+
+#include <vector>
+
+struct KeyEquivalentAndModifierMask {
+ public:
+ KeyEquivalentAndModifierMask() : charCode(nil), mask(0) {}
+ NSString* charCode;
+ NSUInteger mask;
+};
+
+// MultiKeyEquivalentButton is an NSButton subclass that is capable of
+// responding to additional key equivalents. It will respond to the ordinary
+// NSButton key equivalent set by -setKeyEquivalent: and
+// -setKeyEquivalentModifierMask:, and it will also respond to any additional
+// equivalents provided to it in a KeyEquivalentAndModifierMask structure
+// passed to -addKeyEquivalent:.
+
+@interface MultiKeyEquivalentButton : NSButton {
+ @private
+ std::vector<KeyEquivalentAndModifierMask> extraKeys_;
+}
+
+- (void)addKeyEquivalent:(KeyEquivalentAndModifierMask)key;
+
+@end
+
+#endif // CHROME_BROWSER_COCOA_MULTI_KEY_EQUIVALENT_BUTTON_H_
diff --git a/chrome/browser/cocoa/multi_key_equivalent_button.mm b/chrome/browser/cocoa/multi_key_equivalent_button.mm
new file mode 100644
index 0000000..fc10160
--- /dev/null
+++ b/chrome/browser/cocoa/multi_key_equivalent_button.mm
@@ -0,0 +1,33 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "chrome/browser/cocoa/multi_key_equivalent_button.h"
+
+@implementation MultiKeyEquivalentButton
+
+- (void)addKeyEquivalent:(KeyEquivalentAndModifierMask)key {
+ extraKeys_.push_back(key);
+}
+
+- (BOOL)performKeyEquivalent:(NSEvent*)event {
+ NSWindow* modalWindow = [NSApp modalWindow];
+ NSWindow* window = [self window];
+
+ if ([self isEnabled] &&
+ (!modalWindow || modalWindow == window || [window worksWhenModal])) {
+ for (size_t index = 0; index < extraKeys_.size(); ++index) {
+ KeyEquivalentAndModifierMask key = extraKeys_[index];
+ if (key.charCode &&
+ [key.charCode isEqualToString:[event charactersIgnoringModifiers]] &&
+ ([event modifierFlags] & key.mask) == key.mask) {
+ [self performClick:self];
+ return YES;
+ }
+ }
+ }
+
+ return [super performKeyEquivalent:event];
+}
+
+@end
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index f931606..660108a 100755
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -1101,6 +1101,8 @@
'browser/cocoa/location_bar_view_mac.mm',
'browser/cocoa/menu_button.h',
'browser/cocoa/menu_button.mm',
+ 'browser/cocoa/multi_key_equivalent_button.h',
+ 'browser/cocoa/multi_key_equivalent_button.mm',
'browser/cocoa/nswindow_local_state.h',
'browser/cocoa/nswindow_local_state.mm',
'browser/cocoa/page_info_window_controller.h',