diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/web_contents_view_win.cc | 16 | ||||
-rw-r--r-- | chrome/browser/web_contents_view_win.h | 3 |
2 files changed, 17 insertions, 2 deletions
diff --git a/chrome/browser/web_contents_view_win.cc b/chrome/browser/web_contents_view_win.cc index 30665ea..4a15e62 100644 --- a/chrome/browser/web_contents_view_win.cc +++ b/chrome/browser/web_contents_view_win.cc @@ -42,7 +42,8 @@ BOOL CALLBACK DetachPluginWindowsCallback(HWND window, LPARAM param) { WebContentsViewWin::WebContentsViewWin(WebContents* web_contents) : web_contents_(web_contents), error_info_bar_message_(NULL), - info_bar_visible_(false) { + info_bar_visible_(false), + ignore_next_char_event_(false) { } WebContentsViewWin::~WebContentsViewWin() { @@ -293,6 +294,15 @@ void WebContentsViewWin::TakeFocus(bool reverse) { } void WebContentsViewWin::HandleKeyboardEvent(const WebKeyboardEvent& event) { + // Previous calls to TranslateMessage can generate CHAR events as well as + // KEY_DOWN events, even if the latter triggered an accelerator. In these + // cases, we discard the CHAR events. + if (event.type == WebInputEvent::CHAR && ignore_next_char_event_) { + ignore_next_char_event_ = false; + return; + } + ignore_next_char_event_ = false; + // The renderer returned a keyboard event it did not process. This may be // a keyboard shortcut that we have to process. if (event.type == WebInputEvent::KEY_DOWN) { @@ -308,8 +318,10 @@ void WebContentsViewWin::HandleKeyboardEvent(const WebKeyboardEvent& event) { WebInputEvent::CTRL_KEY, (event.modifiers & WebInputEvent::ALT_KEY) == WebInputEvent::ALT_KEY); - if (focus_manager->ProcessAccelerator(accelerator, false)) + if (focus_manager->ProcessAccelerator(accelerator, false)) { + ignore_next_char_event_ = true; return; + } } } diff --git a/chrome/browser/web_contents_view_win.h b/chrome/browser/web_contents_view_win.h index ee28e87..fa249c0 100644 --- a/chrome/browser/web_contents_view_win.h +++ b/chrome/browser/web_contents_view_win.h @@ -136,6 +136,9 @@ class WebContentsViewWin : public WebContentsView, // Whether the info bar view is visible. bool info_bar_visible_; + // Whether to ignore the next CHAR keyboard event. + bool ignore_next_char_event_; + DISALLOW_COPY_AND_ASSIGN(WebContentsViewWin); }; |