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..610b08188ccd3e6fab5eb4e8ab279e21facf0420 100644 |
| --- a/ui/events/test/events_test_utils_x11.cc |
| +++ b/ui/events/test/events_test_utils_x11.cc |
| @@ -28,6 +28,19 @@ unsigned int XEventState(int flags) { |
| ((flags & ui::EF_RIGHT_MOUSE_BUTTON) ? Button3Mask: 0); |
| } |
| +/* |
| +int XButtonNum(int flags) { |
| + 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; |
| + NOTREACHED(); |
| + return 0; |
| +} |
| +*/ |
|
sadrul
2014/01/30 02:14:21
Just remove this.
oshima
2014/01/30 02:16:41
oops sorry. done.
|
| + |
| // Converts EventType to XKeyEvent type. |
| int XKeyEventType(ui::EventType type) { |
| switch (type) { |
| @@ -40,6 +53,20 @@ 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: |
| + NOTREACHED(); |
| + return 0; |
| + } |
| +} |
| + |
| // Converts EventType to XButtonEvent type. |
| int XButtonEventType(ui::EventType type) { |
| switch (type) { |
| @@ -74,14 +101,12 @@ unsigned int XButtonEventButton(ui::EventType type, |
| if (type == ui::ET_MOUSEWHEEL) |
| return Button4; |
| - switch (flags) { |
| - case ui::EF_LEFT_MOUSE_BUTTON: |
| - return Button1; |
| - case ui::EF_MIDDLE_MOUSE_BUTTON: |
| - return Button2; |
| - case ui::EF_RIGHT_MOUSE_BUTTON: |
| - return Button3; |
| - } |
| + if (flags & ui::EF_LEFT_MOUSE_BUTTON) |
| + return Button1; |
| + if (flags & ui::EF_MIDDLE_MOUSE_BUTTON) |
| + return Button2; |
| + if (flags & ui::EF_RIGHT_MOUSE_BUTTON) |
| + return Button3; |
| return 0; |
| } |
| @@ -111,7 +136,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 +178,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 = XButtonEventButton(type, flags); |
| + XISetMask(xievent->buttons.mask, xievent->detail); |
| +} |
| + |
| void ScopedXI2Event::InitButtonEvent(EventType type, |
| int flags) { |
| Cleanup(); |
| @@ -238,6 +279,7 @@ void ScopedXI2Event::Cleanup() { |
| if (xiev) { |
| delete[] xiev->valuators.mask; |
| delete[] xiev->valuators.values; |
| + delete[] xiev->buttons.mask; |
| delete xiev; |
| } |
| } |