Index: chrome/browser/ui/views/browser_actions_container.cc |
=================================================================== |
--- chrome/browser/ui/views/browser_actions_container.cc (revision 122745) |
+++ chrome/browser/ui/views/browser_actions_container.cc (working copy) |
@@ -23,6 +23,7 @@ |
#include "chrome/browser/ui/views/extensions/extension_popup.h" |
#include "chrome/browser/ui/views/toolbar_view.h" |
#include "chrome/common/chrome_notification_types.h" |
+#include "chrome/common/extensions/extension.h" |
#include "chrome/common/extensions/extension_action.h" |
#include "chrome/common/extensions/extension_resource.h" |
#include "chrome/common/pref_names.h" |
@@ -83,6 +84,9 @@ |
} |
void BrowserActionButton::Destroy() { |
+ if (keybinding_.get() && panel_->GetFocusManager()) |
+ panel_->GetFocusManager()->UnregisterAccelerator(*keybinding_.get(), this); |
+ |
if (context_menu_) { |
context_menu_->Cancel(); |
MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
@@ -108,6 +112,20 @@ |
gfx::Size(Extension::kBrowserActionIconMaxSize, |
Extension::kBrowserActionIconMaxSize), |
ImageLoadingTracker::DONT_CACHE); |
+ |
+ // Iterate through all the keybindings and see if one is assigned to the |
+ // browserAction. |
+ const std::vector<Extension::ExtensionKeybinding>& commands = |
+ extension_->keybindings(); |
+ for (size_t i = 0; i < commands.size(); ++i) { |
+ if (commands[i].command_name() == |
+ extension_manifest_values::kBrowserActionKeybindingEvent) { |
+ keybinding_.reset(new ui::Accelerator(commands[i].accelerator())); |
+ panel_->GetFocusManager()->RegisterAccelerator( |
+ *keybinding_.get(), ui::AcceleratorManager::kHighPriority, this); |
+ break; |
+ } |
+ } |
} |
MenuButton::ViewHierarchyChanged(is_add, parent, child); |
@@ -271,6 +289,12 @@ |
context_menu_ = NULL; |
} |
+bool BrowserActionButton::AcceleratorPressed( |
+ const ui::Accelerator& accelerator) { |
+ panel_->OnBrowserActionExecuted(this, false); |
+ return true; |
+} |
+ |
void BrowserActionButton::SetButtonPushed() { |
SetState(views::CustomButton::BS_PUSHED); |
menu_visible_ = true; |
@@ -359,6 +383,8 @@ |
container_width_(0), |
chevron_(NULL), |
overflow_menu_(NULL), |
+ extension_keybinding_registry_(browser->profile(), |
+ owner_view->GetFocusManager()), |
suppress_chevron_(false), |
resize_amount_(0), |
animation_target_size_(0), |