Chromium Code Reviews| Index: ui/events/test/events_test_utils_x11.cc |
| diff --git a/ui/events/test/events_test_utils_x11.cc b/ui/events/test/events_test_utils_x11.cc |
| index 210216b47eed028a24a6cb1e3b35fced4fe9c656..50fc18507a5f389e17291f8df9c2496c0e57e2e8 100644 |
| --- a/ui/events/test/events_test_utils_x11.cc |
| +++ b/ui/events/test/events_test_utils_x11.cc |
| @@ -28,6 +28,16 @@ unsigned int XEventState(int flags) { |
| ((flags & ui::EF_RIGHT_MOUSE_BUTTON) ? Button3Mask: 0); |
| } |
| +int XButtonNum(int flags) { |
|
sadrul
2014/01/30 02:01:42
Could you use XButtonEventButton() instead?
oshima
2014/01/30 02:12:54
I had to change XButtonEventButton, but I think th
|
| + if (flags & ui::EF_LEFT_MOUSE_BUTTON) |
| + return 1; |
| + if (flags & ui::EF_MIDDLE_MOUSE_BUTTON) |
| + return 2; |
| + if (flags & ui::EF_RIGHT_MOUSE_BUTTON) |
| + return 3; |
| + return 0; |
| +} |
| + |
| // Converts EventType to XKeyEvent type. |
| int XKeyEventType(ui::EventType type) { |
| switch (type) { |
| @@ -40,6 +50,19 @@ int XKeyEventType(ui::EventType type) { |
| } |
| } |
| +int XIButtonEventType(ui::EventType type) { |
| + switch (type) { |
| + case ui::ET_MOUSEWHEEL: |
| + case ui::ET_MOUSE_PRESSED: |
| + // The button release X events for mouse wheels are dropped by Aura. |
| + return XI_ButtonPress; |
| + case ui::ET_MOUSE_RELEASED: |
| + return XI_ButtonRelease; |
| + default: |
| + return 0; |
|
sadrul
2014/01/30 02:01:42
Should this have a NOTREACHED()?
oshima
2014/01/30 02:12:54
Done.
|
| + } |
| +} |
| + |
| // Converts EventType to XButtonEvent type. |
| int XButtonEventType(ui::EventType type) { |
| switch (type) { |
| @@ -111,7 +134,11 @@ XEvent* CreateXInput2Event(int deviceid, |
| xiev->detail = tracking_id; |
| xiev->event_x = location.x(); |
| xiev->event_y = location.y(); |
| - |
| + if (evtype == XI_ButtonPress || evtype == XI_ButtonRelease) { |
| + xiev->buttons.mask_len = 8; |
| + xiev->buttons.mask = new unsigned char[xiev->buttons.mask_len]; |
| + memset(xiev->buttons.mask, 0, xiev->buttons.mask_len); |
| + } |
| return event; |
| } |
| @@ -149,6 +176,18 @@ void ScopedXI2Event::InitKeyEvent(EventType type, |
| event_->xkey.same_screen = 1; |
| } |
| +void ScopedXI2Event::InitGenericButtonEvent(int deviceid, |
| + EventType type, |
| + int flags) { |
| + Cleanup(); |
| + event_.reset(CreateXInput2Event(deviceid, |
| + XIButtonEventType(type), 0, gfx::Point())); |
| + XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event_->xcookie.data); |
| + xievent->mods.effective = XEventState(flags); |
| + xievent->detail = XButtonNum(flags); |
| + XISetMask(xievent->buttons.mask, xievent->detail); |
| +} |
| + |
| void ScopedXI2Event::InitButtonEvent(EventType type, |
| int flags) { |
| Cleanup(); |
| @@ -238,6 +277,7 @@ void ScopedXI2Event::Cleanup() { |
| if (xiev) { |
| delete[] xiev->valuators.mask; |
| delete[] xiev->valuators.values; |
| + delete[] xiev->buttons.mask; |
| delete xiev; |
| } |
| } |