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; |