diff options
author | suzhe@chromium.org <suzhe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-11 04:22:01 +0000 |
---|---|---|
committer | suzhe@chromium.org <suzhe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-11 04:22:01 +0000 |
commit | b3a0a41f2c17c81cd51bee018dfc3e43245a55de (patch) | |
tree | fdbc555aab9fb114dad5dcfe409d0b7e9538ef3e /chrome/browser | |
parent | 58e302f7b9ec818727b8fef19fedf668e62e979c (diff) | |
download | chromium_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.mm | 15 | ||||
-rw-r--r-- | chrome/browser/gtk/html_dialog_gtk.cc | 13 | ||||
-rw-r--r-- | chrome/browser/gtk/html_dialog_gtk.h | 1 | ||||
-rw-r--r-- | chrome/browser/views/html_dialog_view.cc | 12 | ||||
-rw-r--r-- | chrome/browser/views/html_dialog_view.h | 1 |
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 |