summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorsuzhe@chromium.org <suzhe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-11 04:22:01 +0000
committersuzhe@chromium.org <suzhe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-11 04:22:01 +0000
commitb3a0a41f2c17c81cd51bee018dfc3e43245a55de (patch)
treefdbc555aab9fb114dad5dcfe409d0b7e9538ef3e /chrome/browser
parent58e302f7b9ec818727b8fef19fedf668e62e979c (diff)
downloadchromium_src-b3a0a41f2c17c81cd51bee018dfc3e43245a55de.zip
chromium_src-b3a0a41f2c17c81cd51bee018dfc3e43245a55de.tar.gz
chromium_src-b3a0a41f2c17c81cd51bee018dfc3e43245a55de.tar.bz2
Implement HandleKeyboardEvent() method in HtmlDialog implementations.
To send unhandled keyboard events to the system default handler, so that system accelerators can work as normal. BUG=30707: Keyboard shortcuts failed to work on Bookmark sync Sign in Authentication dialog TEST=See bug report. Review URL: http://codereview.chromium.org/525112 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@35902 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/cocoa/html_dialog_window_controller.mm15
-rw-r--r--chrome/browser/gtk/html_dialog_gtk.cc13
-rw-r--r--chrome/browser/gtk/html_dialog_gtk.h1
-rw-r--r--chrome/browser/views/html_dialog_view.cc12
-rw-r--r--chrome/browser/views/html_dialog_view.h1
5 files changed, 42 insertions, 0 deletions
diff --git a/chrome/browser/cocoa/html_dialog_window_controller.mm b/chrome/browser/cocoa/html_dialog_window_controller.mm
index 6e880d1..5e65420 100644
--- a/chrome/browser/cocoa/html_dialog_window_controller.mm
+++ b/chrome/browser/cocoa/html_dialog_window_controller.mm
@@ -44,6 +44,7 @@ public:
// HtmlDialogTabContentsDelegate declarations.
virtual void MoveContents(TabContents* source, const gfx::Rect& pos);
virtual void ToolbarSizeChanged(TabContents* source, bool is_animating);
+ virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
private:
HtmlDialogWindowController* controller_; // weak
@@ -168,6 +169,20 @@ void HtmlDialogWindowDelegateBridge::ToolbarSizeChanged(
// TODO(akalin): Figure out what to do here.
}
+// A simplified version of BrowserWindowCocoa::HandleKeyboardEvent().
+// We don't handle global keyboard shortcuts here, but that's fine since
+// they're all browser-specific. (This may change in the future.)
+void HtmlDialogWindowDelegateBridge::HandleKeyboardEvent(
+ const NativeWebKeyboardEvent& event) {
+ if (event.skip_in_browser || event.type == NativeWebKeyboardEvent::Char)
+ return;
+
+ ChromeEventProcessingWindow* event_window =
+ static_cast<ChromeEventProcessingWindow*>([controller_ window]);
+
+ [event_window redispatchEvent:event.os_event];
+}
+
@implementation HtmlDialogWindowController (InternalAPI)
// This gets called whenever a chrome-specific keyboard shortcut is performed
diff --git a/chrome/browser/gtk/html_dialog_gtk.cc b/chrome/browser/gtk/html_dialog_gtk.cc
index 87e3073..c48b1f0 100644
--- a/chrome/browser/gtk/html_dialog_gtk.cc
+++ b/chrome/browser/gtk/html_dialog_gtk.cc
@@ -102,6 +102,19 @@ void HtmlDialogGtk::ToolbarSizeChanged(TabContents* source,
// Ignored.
}
+// A simplified version of BrowserWindowGtk::HandleKeyboardEvent().
+// We don't handle global keyboard shortcuts here, but that's fine since
+// they're all browser-specific. (This may change in the future.)
+void HtmlDialogGtk::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {
+ GdkEventKey* os_event = event.os_event;
+ if (!os_event || event.type == WebKit::WebInputEvent::Char)
+ return;
+
+ // To make sure the default key bindings can still work, such as Escape to
+ // close the dialog.
+ gtk_bindings_activate_event(GTK_OBJECT(dialog_), os_event);
+}
+
////////////////////////////////////////////////////////////////////////////////
// HtmlDialogGtk:
diff --git a/chrome/browser/gtk/html_dialog_gtk.h b/chrome/browser/gtk/html_dialog_gtk.h
index 0d096cf..00a7a4d 100644
--- a/chrome/browser/gtk/html_dialog_gtk.h
+++ b/chrome/browser/gtk/html_dialog_gtk.h
@@ -47,6 +47,7 @@ class HtmlDialogGtk : public HtmlDialogTabContentsDelegate,
// Overridden from TabContentsDelegate:
virtual void MoveContents(TabContents* source, const gfx::Rect& pos);
virtual void ToolbarSizeChanged(TabContents* source, bool is_animating);
+ virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
private:
static void OnResponse(GtkWidget* widget, int response,
diff --git a/chrome/browser/views/html_dialog_view.cc b/chrome/browser/views/html_dialog_view.cc
index e20e401..67b2852 100644
--- a/chrome/browser/views/html_dialog_view.cc
+++ b/chrome/browser/views/html_dialog_view.cc
@@ -150,6 +150,18 @@ void HtmlDialogView::ToolbarSizeChanged(TabContents* source,
Layout();
}
+// A simplified version of BrowserView::HandleKeyboardEvent().
+// We don't handle global keyboard shortcuts here, but that's fine since
+// they're all browser-specific. (This may change in the future.)
+void HtmlDialogView::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {
+#if defined(OS_WIN)
+ // Any unhandled keyboard/character messages should be defproced.
+ // This allows stuff like F10, etc to work correctly.
+ DefWindowProc(event.os_event.hwnd, event.os_event.message,
+ event.os_event.wParam, event.os_event.lParam);
+#endif
+}
+
////////////////////////////////////////////////////////////////////////////////
// HtmlDialogView:
diff --git a/chrome/browser/views/html_dialog_view.h b/chrome/browser/views/html_dialog_view.h
index e61c50e..94322b2 100644
--- a/chrome/browser/views/html_dialog_view.h
+++ b/chrome/browser/views/html_dialog_view.h
@@ -68,6 +68,7 @@ class HtmlDialogView
// Overridden from TabContentsDelegate:
virtual void MoveContents(TabContents* source, const gfx::Rect& pos);
virtual void ToolbarSizeChanged(TabContents* source, bool is_animating);
+ virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
private:
// This view is a delegate to the HTML content since it needs to get notified