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 4d9b3f3315ade17f18dd08204cef34481c57638d..c361b2ba7440700d3e9a4b4eb0a534e50862c6fc 100644 |
--- a/content/browser/renderer_host/web_input_event_aurax11.cc |
+++ b/content/browser/renderer_host/web_input_event_aurax11.cc |
@@ -42,7 +42,10 @@ |
#include "base/event_types.h" |
#include "base/logging.h" |
+#include "ui/aura/event.h" |
+#include "ui/base/events.h" |
#include "ui/base/keycodes/keyboard_codes.h" |
+#include "ui/base/keycodes/keyboard_code_conversion_x.h" |
namespace content { |
@@ -56,6 +59,26 @@ double XEventTimeToWebEventTime(Time time) { |
return time / 1000.0; |
} |
+int EventFlagsToWebEventModifiers(int flags) { |
+ int modifiers = 0; |
+ if (flags & ui::EF_SHIFT_DOWN) |
+ modifiers |= WebKit::WebInputEvent::ShiftKey; |
+ if (flags & ui::EF_CONTROL_DOWN) |
+ modifiers |= WebKit::WebInputEvent::ControlKey; |
+ if (flags & ui::EF_ALT_DOWN) |
+ modifiers |= WebKit::WebInputEvent::AltKey; |
+ // TODO(beng): MetaKey/META_MASK |
+ if (flags & ui::EF_LEFT_BUTTON_DOWN) |
+ modifiers |= WebKit::WebInputEvent::LeftButtonDown; |
+ if (flags & ui::EF_MIDDLE_BUTTON_DOWN) |
+ modifiers |= WebKit::WebInputEvent::MiddleButtonDown; |
+ if (flags & ui::EF_RIGHT_BUTTON_DOWN) |
+ modifiers |= WebKit::WebInputEvent::RightButtonDown; |
+ if (flags & ui::EF_CAPS_LOCK_DOWN) |
+ modifiers |= WebKit::WebInputEvent::CapsLockOn; |
+ return modifiers; |
+} |
+ |
int XStateToWebEventModifiers(unsigned int state) { |
int modifiers = 0; |
if (state & ShiftMask) |
@@ -79,8 +102,7 @@ int XStateToWebEventModifiers(unsigned int state) { |
} |
int XKeyEventToWindowsKeyCode(XKeyEvent* event) { |
- // TODO(beng): |
- return 0; |
+ return ui::KeyboardCodeFromXKeyEvent((XEvent*)event); |
} |
// From |
@@ -155,117 +177,77 @@ WebKit::WebMouseEvent::Button ButtonFromXState(int state) { |
// We have to count clicks (for double-clicks) manually. |
unsigned int g_num_clicks = 0; |
-::Window* g_last_click_window = NULL; |
-Time g_last_click_time = 0; |
+double g_last_click_time = 0.0; |
int g_last_click_x = 0; |
- int g_last_click_y = 0; |
+int g_last_click_y = 0; |
WebKit::WebMouseEvent::Button g_last_click_button = |
WebKit::WebMouseEvent::ButtonNone; |
-bool ShouldForgetPreviousClick(::Window* window, Time time, int x, int y) { |
- if (window != g_last_click_window) |
- return true; |
- |
- const Time double_click_time = 250; |
+bool ShouldForgetPreviousClick(double time, int x, int y) { |
+ const double double_click_time = 0.250; // in seconds |
const int double_click_distance = 5; |
- return (time - g_last_click_time) > double_click_time |
- || std::abs(x - g_last_click_x) > double_click_distance |
- || std::abs(y - g_last_click_y) > double_click_distance; |
+ return (time - g_last_click_time) > double_click_time || |
+ std::abs(x - g_last_click_x) > double_click_distance || |
+ std::abs(y - g_last_click_y) > double_click_distance; |
} |
void ResetClickCountState() { |
g_num_clicks = 0; |
- g_last_click_window = NULL; |
- g_last_click_time = 0; |
+ g_last_click_time = 0.0; |
g_last_click_x = 0; |
g_last_click_y = 0; |
g_last_click_button = WebKit::WebMouseEvent::ButtonNone; |
} |
-void InitWebKitEventFromButtonEvent(WebKit::WebMouseEvent* webkit_event, |
- XButtonEvent* native_event) { |
- webkit_event->modifiers = XStateToWebEventModifiers(native_event->state); |
- webkit_event->timeStampSeconds = XEventTimeToWebEventTime(native_event->time); |
+} // namespace |
- webkit_event->x = native_event->x; |
- webkit_event->y = native_event->y; |
- webkit_event->windowX = webkit_event->x; |
- webkit_event->windowY = webkit_event->y; |
- webkit_event->globalX = native_event->x_root; |
- webkit_event->globalY = native_event->y_root; |
+WebKit::WebMouseEvent MakeWebMouseEventFromAuraEvent(aura::MouseEvent* event) { |
+ WebKit::WebMouseEvent webkit_event; |
- switch (native_event->type) { |
- case ButtonPress: |
- webkit_event->type = WebKit::WebInputEvent::MouseDown; |
- webkit_event->button = ButtonFromXButton(native_event->button); |
- if (!ShouldForgetPreviousClick(&native_event->window, |
- native_event->time, |
- native_event->x, |
- native_event->y) && |
- webkit_event->button == g_last_click_button) { |
+ webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); |
+ webkit_event.timeStampSeconds = event->time_stamp().ToDoubleT(); |
+ |
+ webkit_event.button = WebKit::WebMouseEvent::ButtonNone; |
+ if (event->flags() & ui::EF_LEFT_BUTTON_DOWN) |
+ webkit_event.button = WebKit::WebMouseEvent::ButtonLeft; |
+ if (event->flags() & ui::EF_MIDDLE_BUTTON_DOWN) |
+ webkit_event.button = WebKit::WebMouseEvent::ButtonMiddle; |
+ if (event->flags() & ui::EF_RIGHT_BUTTON_DOWN) |
+ webkit_event.button = WebKit::WebMouseEvent::ButtonRight; |
+ |
+ switch (event->type()) { |
+ case ui::ET_MOUSE_PRESSED: |
+ webkit_event.type = WebKit::WebInputEvent::MouseDown; |
+ if (!ShouldForgetPreviousClick(event->time_stamp().ToDoubleT(), |
+ event->location().x(), event->location().y()) && |
+ webkit_event.button == g_last_click_button) { |
++g_num_clicks; |
} else { |
g_num_clicks = 1; |
- g_last_click_window = &native_event->window; |
- g_last_click_x = native_event->x; |
- g_last_click_y = native_event->y; |
- g_last_click_button = webkit_event->button; |
+ g_last_click_time = event->time_stamp().ToDoubleT(); |
+ g_last_click_x = event->location().x(); |
+ g_last_click_y = event->location().y(); |
+ g_last_click_button = webkit_event.button; |
} |
+ webkit_event.clickCount = g_num_clicks; |
break; |
- case ButtonRelease: |
- webkit_event->type = WebKit::WebInputEvent::MouseUp; |
- webkit_event->button = ButtonFromXButton(native_event->button); |
+ case ui::ET_MOUSE_RELEASED: |
+ webkit_event.type = WebKit::WebInputEvent::MouseUp; |
break; |
- default: |
- NOTREACHED(); |
- break; |
- } |
- webkit_event->clickCount = g_num_clicks; |
-} |
- |
-void InitWebKitEventFromMotionEvent(WebKit::WebMouseEvent* webkit_event, |
- XMotionEvent* native_event) { |
- webkit_event->modifiers = XStateToWebEventModifiers(native_event->state); |
- webkit_event->timeStampSeconds = XEventTimeToWebEventTime(native_event->time); |
- |
- webkit_event->x = native_event->x; |
- webkit_event->y = native_event->y; |
- webkit_event->windowX = webkit_event->x; |
- webkit_event->windowY = webkit_event->y; |
- webkit_event->globalX = native_event->x_root; |
- webkit_event->globalY = native_event->y_root; |
- |
- webkit_event->type = WebKit::WebInputEvent::MouseMove; |
- webkit_event->button = ButtonFromXState(native_event->state); |
- if (ShouldForgetPreviousClick(&native_event->window, |
- native_event->time, |
- native_event->x, |
- native_event->y)) { |
- ResetClickCountState(); |
- } |
-} |
- |
-} // namespace |
- |
-WebKit::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent( |
- base::NativeEvent native_event) { |
- WebKit::WebMouseEvent webkit_event; |
- |
- // In X, button and mouse movement events are different event types that |
- // require different handling. |
- // TODO(sadrul): Add support for XInput2 events. |
- switch (native_event->type) { |
- case ButtonPress: |
- case ButtonRelease: |
- InitWebKitEventFromButtonEvent(&webkit_event, &native_event->xbutton); |
- break; |
- case MotionNotify: |
- InitWebKitEventFromMotionEvent(&webkit_event, &native_event->xmotion); |
+ case ui::ET_MOUSE_ENTERED: |
+ case ui::ET_MOUSE_EXITED: |
+ case ui::ET_MOUSE_MOVED: |
+ case ui::ET_MOUSE_DRAGGED: |
+ webkit_event.type = WebKit::WebInputEvent::MouseMove; |
+ if (ShouldForgetPreviousClick(event->time_stamp().ToDoubleT(), |
+ event->location().x(), event->location().y())) |
+ ResetClickCountState(); |
break; |
default: |
- NOTREACHED(); |
+ NOTIMPLEMENTED() << "Received unexpected event: " << event->type(); |
break; |
} |
+ |
return webkit_event; |
} |
@@ -299,7 +281,7 @@ WebKit::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent( |
webkit_event.unmodifiedText[0] = '\r'; |
} else { |
webkit_event.unmodifiedText[0] = |
- static_cast<WebKit::WebUChar>(native_key_event->keycode); |
+ ui::DefaultXKeysymFromHardwareKeycode(native_key_event->keycode); |
} |
if (webkit_event.modifiers & WebKit::WebInputEvent::ControlKey) { |