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

Unified Diff: chrome/browser/gtk/browser_window_gtk.cc

Issue 224023: Don't send tab switching/killing/creating keyboard accelerators to pages. Th... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: call Browser:IsReservedAccelerator from tab_contents_view.cc instead of each platform file Created 11 years, 3 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/gtk/browser_window_gtk.cc
===================================================================
--- chrome/browser/gtk/browser_window_gtk.cc (revision 27783)
+++ chrome/browser/gtk/browser_window_gtk.cc (working copy)
@@ -198,6 +198,10 @@
{ GDK_Page_Up, IDC_MOVE_TAB_PREVIOUS,
GdkModifierType(GDK_CONTROL_MASK | GDK_SHIFT_MASK) },
{ GDK_Page_Up, IDC_SELECT_PREVIOUS_TAB, GDK_CONTROL_MASK },
+ { GDK_t, IDC_NEW_TAB, GDK_CONTROL_MASK },
+ { GDK_n, IDC_NEW_WINDOW, GDK_CONTROL_MASK },
+ { GDK_n, IDC_NEW_INCOGNITO_WINDOW,
+ GdkModifierType(GDK_CONTROL_MASK | GDK_SHIFT_MASK) },
{ GDK_w, IDC_CLOSE_TAB, GDK_CONTROL_MASK },
{ GDK_t, IDC_RESTORE_TAB,
GdkModifierType(GDK_CONTROL_MASK | GDK_SHIFT_MASK) },
@@ -361,18 +365,15 @@
kAcceleratorMap[i].modifier_type == modifier)
return kAcceleratorMap[i].command_id;
}
- NOTREACHED();
- return 0;
+
+ return -1;
}
-// An event handler for key press events. We need to special case key
-// combinations that are not valid gtk accelerators. This function returns
-// TRUE if it can handle the key press.
-gboolean HandleCustomAccelerator(guint keyval, GdkModifierType modifier,
- Browser* browser) {
+int GetCustomCommandId(guint keyval, GdkModifierType modifier) {
// Filter modifier to only include accelerator modifiers.
modifier = static_cast<GdkModifierType>(
modifier & gtk_accelerator_get_default_mod_mask());
+
switch (keyval) {
// Gtk doesn't allow GDK_Tab or GDK_ISO_Left_Tab to be an accelerator (see
// gtk_accelerator_valid), so we need to handle these accelerators
@@ -384,20 +385,31 @@
case GDK_ISO_Left_Tab:
case GDK_KP_Tab:
if (GDK_CONTROL_MASK == modifier) {
- browser->ExecuteCommand(IDC_SELECT_NEXT_TAB);
- return TRUE;
+ return IDC_SELECT_NEXT_TAB;
} else if ((GDK_CONTROL_MASK | GDK_SHIFT_MASK) == modifier) {
- browser->ExecuteCommand(IDC_SELECT_PREVIOUS_TAB);
- return TRUE;
+ return IDC_SELECT_PREVIOUS_TAB;
}
break;
default:
break;
}
- return FALSE;
+ return -1;
}
+// An event handler for key press events. We need to special case key
+// combinations that are not valid gtk accelerators. This function returns
+// TRUE if it can handle the key press.
+gboolean HandleCustomAccelerator(guint keyval, GdkModifierType modifier,
+ Browser* browser) {
+ int command = GetCustomCommandId(keyval, modifier);
+ if (command == -1)
+ return FALSE;
+
+ browser->ExecuteCommand(command);
+ return TRUE;
+}
+
// Handle accelerators that we don't want the native widget to be able to
// override.
gboolean PreHandleAccelerator(guint keyval, GdkModifierType modifier,
@@ -1153,6 +1165,18 @@
void BrowserWindowGtk::ShowAppMenu() {
}
+int BrowserWindowGtk::GetCommandId(const NativeWebKeyboardEvent& event) {
+ if (!event.os_event)
+ return -1;
+
+ guint keyval = event.os_event->keyval;
+ GdkModifierType modifier = GdkModifierType(event.os_event->state);
+ int command = ::GetCommandId(keyval, modifier);
+ if (command == -1)
+ command = GetCustomCommandId(keyval, modifier);
+ return command;
+}
+
void BrowserWindowGtk::ConfirmBrowserCloseWithPendingDownloads() {
new DownloadInProgressDialogGtk(browser());
}
@@ -1873,7 +1897,8 @@
guint keyval,
GdkModifierType modifier,
BrowserWindowGtk* browser_window) {
- int command_id = GetCommandId(keyval, modifier);
+ int command_id = ::GetCommandId(keyval, modifier);
+ DCHECK(command_id != -1);
browser_window->ExecuteBrowserCommand(command_id);
return TRUE;

Powered by Google App Engine
This is Rietveld 408576698