summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/web_contents_view_win.cc16
-rw-r--r--chrome/browser/web_contents_view_win.h3
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);
};