Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1347)

Unified Diff: content/browser/renderer_host/web_input_event_aurax11.cc

Issue 10541139: Improve MakeWebKeyboardEventFromAuraEvent() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix linux_chromeos_clang shared build Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/web_input_event_aura_unittest.cc ('k') | content/content_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/web_input_event_aurax11.cc
diff --git a/content/browser/renderer_host/web_input_event_aurax11.cc b/content/browser/renderer_host/web_input_event_aurax11.cc
index 2c9df58eb2bf9aab1fbd1f94aa7d71d23fa89e10..766b1b3b5cdfbc737e42124d4033c243edd4cfc1 100644
--- a/content/browser/renderer_host/web_input_event_aurax11.cc
+++ b/content/browser/renderer_host/web_input_event_aurax11.cc
@@ -57,6 +57,32 @@ namespace {
// This matches Firefox behavior.
const int kPixelsPerTick = 53;
+// Normalizes event.flags() to make it Windows/Mac compatible. Since the way
+// of setting modifier mask on X is very different than Windows/Mac as shown
+// in http://crbug.com/127142#c8, the normalization is necessary.
+int NormalizeEventFlags(const aura::KeyEvent& event) {
+ int mask = 0;
+ switch (event.key_code()) {
+ case ui::VKEY_CONTROL:
+ mask = ui::EF_CONTROL_DOWN;
+ break;
+ case ui::VKEY_SHIFT:
+ mask = ui::EF_SHIFT_DOWN;
+ break;
+ case ui::VKEY_MENU:
+ mask = ui::EF_ALT_DOWN;
+ break;
+ case ui::VKEY_CAPITAL:
+ mask = ui::EF_CAPS_LOCK_DOWN;
+ break;
+ default:
+ return event.flags();
+ }
+ if (event.type() == ui::ET_KEY_PRESSED)
+ return event.flags() | mask;
+ return event.flags() & ~mask;
+}
+
int EventFlagsToWebEventModifiers(int flags) {
int modifiers = 0;
if (flags & ui::EF_SHIFT_DOWN)
@@ -77,28 +103,6 @@ int EventFlagsToWebEventModifiers(int flags) {
return modifiers;
}
-int XStateToWebEventModifiers(unsigned int state) {
- int modifiers = 0;
- if (state & ShiftMask)
- modifiers |= WebKit::WebInputEvent::ShiftKey;
- if (state & ControlMask)
- modifiers |= WebKit::WebInputEvent::ControlKey;
- if (state & Mod1Mask)
- modifiers |= WebKit::WebInputEvent::AltKey;
- // TODO(beng): MetaKey/META_MASK
- if (state & Button1Mask)
- modifiers |= WebKit::WebInputEvent::LeftButtonDown;
- if (state & Button2Mask)
- modifiers |= WebKit::WebInputEvent::MiddleButtonDown;
- if (state & Button3Mask)
- modifiers |= WebKit::WebInputEvent::RightButtonDown;
- if (state & LockMask)
- modifiers |= WebKit::WebInputEvent::CapsLockOn;
- if (state & Mod2Mask)
- modifiers |= WebKit::WebInputEvent::NumLockOn;
- return modifiers;
-}
-
int XKeyEventToWindowsKeyCode(XKeyEvent* event) {
return ui::KeyboardCodeFromXKeyEvent((XEvent*)event);
}
@@ -283,7 +287,8 @@ WebKit::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent(
XKeyEvent* native_key_event = &native_event->xkey;
webkit_event.timeStampSeconds = event->time_stamp().InSecondsF();
- webkit_event.modifiers = XStateToWebEventModifiers(native_key_event->state);
+ webkit_event.modifiers =
+ EventFlagsToWebEventModifiers(NormalizeEventFlags(*event));
switch (native_event->type) {
case KeyPress:
« no previous file with comments | « content/browser/renderer_host/web_input_event_aura_unittest.cc ('k') | content/content_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698