Index: chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc |
=================================================================== |
--- chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc (revision 144897) |
+++ chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc (working copy) |
@@ -164,6 +164,14 @@ |
this, chrome::NOTIFICATION_EXTENSION_UNLOADED, |
content::Source<Profile>( |
toolbar->browser()->profile()->GetOriginalProfile())); |
+ registrar_.Add( |
+ this, chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED, |
+ content::Source<Profile>( |
+ toolbar->browser()->profile()->GetOriginalProfile())); |
+ registrar_.Add( |
+ this, chrome::NOTIFICATION_EXTENSION_COMMAND_REMOVED, |
+ content::Source<Profile>( |
+ toolbar->browser()->profile()->GetOriginalProfile())); |
} |
~BrowserActionButton() { |
@@ -196,6 +204,21 @@ |
case chrome::NOTIFICATION_WINDOW_CLOSED: |
DisconnectBrowserActionPopupAccelerator(); |
break; |
+ case chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED: |
+ case chrome::NOTIFICATION_EXTENSION_COMMAND_REMOVED: { |
+ std::pair<const std::string, const std::string>* payload = |
+ content::Details<std::pair<const std::string, const std::string> >( |
+ details).ptr(); |
+ if (extension_->id() == payload->first && |
Yoyo Zhou
2012/06/29 18:30:58
nit: looks funny to have these comparisons be diff
|
+ payload->second == |
+ extension_manifest_values::kBrowserActionKeybindingEvent) { |
+ if (type == chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED) |
+ ConnectBrowserActionPopupAccelerator(); |
+ else |
+ DisconnectBrowserActionPopupAccelerator(); |
+ } |
+ break; |
+ } |
default: |
NOTREACHED(); |
break; |
@@ -432,6 +455,11 @@ |
g_object_unref(accel_group_); |
accel_group_ = NULL; |
keybinding_.reset(NULL); |
+ |
+ // We've removed the accelerator, so no need to listen to this anymore. |
+ registrar_.Remove(this, |
+ chrome::NOTIFICATION_WINDOW_CLOSED, |
+ content::Source<GtkWindow>(window)); |
Finnur
2012/06/29 14:35:38
If we don't remove this, then double registration
Yoyo Zhou
2012/06/29 18:30:58
Yup.
|
} |
} |