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

Unified Diff: chrome/browser/ui/gtk/location_bar_view_gtk.cc

Issue 9693047: Add Extension Keybinding test for page actions. This is to facilitate an upcoming port of the PageA… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/gtk/location_bar_view_gtk.cc
===================================================================
--- chrome/browser/ui/gtk/location_bar_view_gtk.cc (revision 126791)
+++ chrome/browser/ui/gtk/location_bar_view_gtk.cc (working copy)
@@ -37,6 +37,7 @@
#include "chrome/browser/ui/content_settings/content_setting_image_model.h"
#include "chrome/browser/ui/gtk/bookmarks/bookmark_bubble_gtk.h"
#include "chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.h"
+#include "chrome/browser/ui/gtk/browser_window_gtk.h"
#include "chrome/browser/ui/gtk/content_setting_bubble_gtk.h"
#include "chrome/browser/ui/gtk/extensions/extension_popup_gtk.h"
#include "chrome/browser/ui/gtk/first_run_bubble.h"
@@ -60,6 +61,7 @@
#include "grit/theme_resources.h"
#include "grit/theme_resources_standard.h"
#include "net/base/net_util.h"
+#include "ui/base/accelerators/accelerator_gtk.h"
#include "ui/base/dragdrop/gtk_dnd_util.h"
#include "ui/base/gtk/gtk_hig_constants.h"
#include "ui/base/l10n/l10n_util.h"
@@ -671,7 +673,7 @@
WebContents* contents = GetWebContents();
if (!page_action_views_.empty() && contents) {
- GURL url = GURL(toolbar_model_->GetText());
+ GURL url = browser()->GetSelectedWebContents()->GetURL();
for (size_t i = 0; i < page_action_views_.size(); i++) {
page_action_views_[i]->UpdateVisibility(
@@ -1433,6 +1435,9 @@
page_action_(page_action),
last_icon_pixbuf_(NULL),
tracker_(this),
+ current_tab_id_(-1),
+ window_(NULL),
+ accel_group_(NULL),
preview_enabled_(false) {
event_box_.Own(gtk_event_box_new());
gtk_widget_set_size_request(event_box_.get(),
@@ -1445,6 +1450,8 @@
G_CALLBACK(&OnButtonPressedThunk), this);
g_signal_connect_after(event_box_.get(), "expose-event",
G_CALLBACK(OnExposeEventThunk), this);
+ g_signal_connect(event_box_.get(), "realize",
+ G_CALLBACK(OnRealizeThunk), this);
image_.Own(gtk_image_new());
gtk_container_add(GTK_CONTAINER(event_box_.get()), image_.get());
@@ -1474,6 +1481,8 @@
}
LocationBarViewGtk::PageActionViewGtk::~PageActionViewGtk() {
+ DisconnectPageActionAccelerator();
+
image_.Destroy();
event_box_.Destroy();
for (PixbufMap::iterator iter = pixbufs_.begin(); iter != pixbufs_.end();
@@ -1590,6 +1599,14 @@
OnButtonPressed(widget(), &event);
}
+void LocationBarViewGtk::PageActionViewGtk::Observe(
+ int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) {
+ DCHECK(type == chrome::NOTIFICATION_WINDOW_CLOSED);
+ DisconnectPageActionAccelerator();
+}
+
void LocationBarViewGtk::PageActionViewGtk::InspectPopup(
ExtensionAction* action) {
ShowPopup(true);
@@ -1607,6 +1624,60 @@
return true;
}
+void LocationBarViewGtk::PageActionViewGtk::ConnectPageActionAccelerator() {
+ const Extension* extension = owner_->browser()->profile()->
+ GetExtensionService()->GetExtensionById(page_action_->extension_id(),
Matt Perry 2012/03/15 19:31:24 Use extensions()->GetByID() instead. We're trying
+ false);
+ window_ = owner_->browser()->window()->GetNativeHandle();
+
+ // Iterate through all the keybindings and see if one is assigned to the
+ // pageAction.
+ 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::kPageActionKeybindingEvent)
+ continue;
+
+ // Found the browser action shortcut command, register it.
+ keybinding_.reset(new ui::AcceleratorGtk(
+ commands[i].accelerator().key_code(),
+ commands[i].accelerator().IsShiftDown(),
+ commands[i].accelerator().IsCtrlDown(),
+ commands[i].accelerator().IsAltDown()));
+
+ accel_group_ = gtk_accel_group_new();
+ gtk_window_add_accel_group(window_, accel_group_);
+
+ gtk_accel_group_connect(
+ accel_group_,
+ keybinding_.get()->GetGdkKeyCode(),
+ keybinding_.get()->gdk_modifier_type(),
Matt Perry 2012/03/15 19:31:24 nit: can skip the .get()
+ GtkAccelFlags(0),
+ g_cclosure_new(G_CALLBACK(OnGtkAccelerator), this, NULL));
+
+ // Since we've added an accelerator, we'll need to unregister it before
+ // the window is closed, so we listen for the window being closed.
+ registrar_.Add(this,
+ chrome::NOTIFICATION_WINDOW_CLOSED,
+ content::Source<GtkWindow>(window_));
+ break;
+ }
+}
+
+void LocationBarViewGtk::PageActionViewGtk::DisconnectPageActionAccelerator() {
+ if (accel_group_) {
+ gtk_accel_group_disconnect_key(
+ accel_group_,
+ keybinding_.get()->GetGdkKeyCode(),
+ static_cast<GdkModifierType>(keybinding_.get()->modifiers()));
+ gtk_window_remove_accel_group(window_, accel_group_);
+ g_object_unref(accel_group_);
+ accel_group_ = NULL;
+ keybinding_.reset(NULL);
+ }
+}
+
gboolean LocationBarViewGtk::PageActionViewGtk::OnButtonPressed(
GtkWidget* sender,
GdkEventButton* event) {
@@ -1656,3 +1727,23 @@
page_action_->PaintBadge(&canvas, gfx::Rect(allocation), tab_id);
return FALSE;
}
+
+void LocationBarViewGtk::PageActionViewGtk::OnRealize(GtkWidget* widget) {
+ ConnectPageActionAccelerator();
+}
+
+// static
+gboolean LocationBarViewGtk::PageActionViewGtk::OnGtkAccelerator(
+ GtkAccelGroup* accel_group,
+ GObject* acceleratable,
+ guint keyval,
+ GdkModifierType modifier,
+ void* user_data) {
+ PageActionViewGtk* view = static_cast<PageActionViewGtk*>(user_data);
+ if (!gtk_widget_get_visible(view->widget()))
+ return FALSE;
+
+ GdkEventButton event = {};
+ event.button = 1;
+ return view->OnButtonPressed(view->widget(), &event);
+}
« no previous file with comments | « chrome/browser/ui/gtk/location_bar_view_gtk.h ('k') | chrome/browser/ui/views/location_bar/location_bar_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698