| 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..20d1c17da5057eeb33216b0a5232bdd1319b671a 100644
|
| --- a/ui/events/test/events_test_utils_x11.cc
|
| +++ b/ui/events/test/events_test_utils_x11.cc
|
| @@ -40,6 +40,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 +88,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 +123,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 +165,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 +266,7 @@ void ScopedXI2Event::Cleanup() {
|
| if (xiev) {
|
| delete[] xiev->valuators.mask;
|
| delete[] xiev->valuators.values;
|
| + delete[] xiev->buttons.mask;
|
| delete xiev;
|
| }
|
| }
|
|
|