summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-28 22:28:45 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-28 22:28:45 +0000
commit41136d524446138af183af9ede781d87846828c6 (patch)
tree04eda23850a2f966417bec752d299cc3d6555e97 /chrome
parent26e9bd105c818600c5d1dfdc9143b4d8b12aa7c1 (diff)
downloadchromium_src-41136d524446138af183af9ede781d87846828c6.zip
chromium_src-41136d524446138af183af9ede781d87846828c6.tar.gz
chromium_src-41136d524446138af183af9ede781d87846828c6.tar.bz2
GTK: More hotkeys.
- ctrl+e = ctrl+k - alt + e and alt + f to open the page and wrench menus respectively (emulating menu bar _File and _Edit) BUG=none TEST=use the new hotkeys Review URL: http://codereview.chromium.org/160292 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21905 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/gtk/browser_toolbar_gtk.cc28
-rw-r--r--chrome/browser/gtk/browser_toolbar_gtk.h4
-rw-r--r--chrome/browser/gtk/browser_window_gtk.cc1
-rw-r--r--chrome/browser/gtk/menu_gtk.cc5
4 files changed, 38 insertions, 0 deletions
diff --git a/chrome/browser/gtk/browser_toolbar_gtk.cc b/chrome/browser/gtk/browser_toolbar_gtk.cc
index dfaad68..bd1639d 100644
--- a/chrome/browser/gtk/browser_toolbar_gtk.cc
+++ b/chrome/browser/gtk/browser_toolbar_gtk.cc
@@ -228,6 +228,20 @@ void BrowserToolbarGtk::Init(Profile* profile,
gtk_box_pack_start(GTK_BOX(toolbar_), menus_hbox_, FALSE, FALSE, 0);
+ // Page and app menu accelerators.
+ GtkAccelGroup* accel_group = gtk_accel_group_new();
+ gtk_window_add_accel_group(top_level_window, accel_group);
+ // Drop the initial ref on |accel_group| so |window_| will own it.
+ g_object_unref(accel_group);
+ // I would use "popup-menu" here, but GTK complains. I would use "activate",
+ // but the docs say never to connect to that signal.
+ gtk_widget_add_accelerator(page_menu, "clicked", accel_group,
+ GDK_e, GDK_MOD1_MASK,
+ static_cast<GtkAccelFlags>(0));
+ gtk_widget_add_accelerator(chrome_menu, "clicked", accel_group,
+ GDK_f, GDK_MOD1_MASK,
+ static_cast<GtkAccelFlags>(0));
+
if (ShouldOnlyShowLocation()) {
gtk_widget_show(event_box_);
gtk_widget_show(toolbar_);
@@ -442,6 +456,8 @@ GtkWidget* BrowserToolbarGtk::BuildToolbarMenuButton(
gtk_widget_set_tooltip_text(button, localized_tooltip.c_str());
g_signal_connect(button, "button-press-event",
G_CALLBACK(OnMenuButtonPressEvent), this);
+ g_signal_connect(button, "clicked",
+ G_CALLBACK(OnMenuClicked), this);
GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
return button;
@@ -582,6 +598,18 @@ gboolean BrowserToolbarGtk::OnMenuButtonPressEvent(GtkWidget* button,
}
// static
+gboolean BrowserToolbarGtk::OnMenuClicked(GtkWidget* button,
+ BrowserToolbarGtk* toolbar) {
+ gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(button),
+ GTK_STATE_ACTIVE);
+ MenuGtk* menu = button == toolbar->page_menu_button_.get() ?
+ toolbar->page_menu_.get() : toolbar->app_menu_.get();
+ menu->PopupAsFromKeyEvent(button);
+
+ return TRUE;
+}
+
+// static
void BrowserToolbarGtk::OnDragDataReceived(GtkWidget* widget,
GdkDragContext* drag_context, gint x, gint y,
GtkSelectionData* data, guint info, guint time,
diff --git a/chrome/browser/gtk/browser_toolbar_gtk.h b/chrome/browser/gtk/browser_toolbar_gtk.h
index 945d06c..21bca5f 100644
--- a/chrome/browser/gtk/browser_toolbar_gtk.h
+++ b/chrome/browser/gtk/browser_toolbar_gtk.h
@@ -130,6 +130,10 @@ class BrowserToolbarGtk : public CommandUpdater::CommandObserver,
GdkEventButton* event,
BrowserToolbarGtk* toolbar);
+ // Gtk callback used when a hotkey activates the menu buttons.
+ static gboolean OnMenuClicked(GtkWidget* button,
+ BrowserToolbarGtk* toolbar);
+
// Used for drags onto home button.
static void OnDragDataReceived(GtkWidget* widget,
GdkDragContext* drag_context,
diff --git a/chrome/browser/gtk/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc
index c8dae03..a2c477e 100644
--- a/chrome/browser/gtk/browser_window_gtk.cc
+++ b/chrome/browser/gtk/browser_window_gtk.cc
@@ -154,6 +154,7 @@ const struct AcceleratorMapping {
} kAcceleratorMap[] = {
// Focus.
{ GDK_k, IDC_FOCUS_SEARCH, GDK_CONTROL_MASK },
+ { GDK_e, IDC_FOCUS_SEARCH, GDK_CONTROL_MASK },
{ XF86XK_Search, IDC_FOCUS_SEARCH, GdkModifierType(0) },
{ GDK_l, IDC_FOCUS_LOCATION, GDK_CONTROL_MASK },
{ GDK_d, IDC_FOCUS_LOCATION, GDK_MOD1_MASK },
diff --git a/chrome/browser/gtk/menu_gtk.cc b/chrome/browser/gtk/menu_gtk.cc
index f1b8f9a..f0a85d8 100644
--- a/chrome/browser/gtk/menu_gtk.cc
+++ b/chrome/browser/gtk/menu_gtk.cc
@@ -106,6 +106,11 @@ void MenuGtk::PopupAsContext(guint32 event_time) {
gtk_menu_popup(GTK_MENU(menu_.get()), NULL, NULL, NULL, NULL, 3, event_time);
}
+void MenuGtk::PopupAsFromKeyEvent(GtkWidget* widget) {
+ Popup(widget, 0, gtk_get_current_event_time());
+ gtk_menu_shell_select_first(GTK_MENU_SHELL(menu_.get()), FALSE);
+}
+
void MenuGtk::Cancel() {
gtk_menu_popdown(GTK_MENU(menu_.get()));
}