| 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 20d1c17da5057eeb33216b0a5232bdd1319b671a..19cb644af54abba82e0c9cf8b5f29d71a919bb9b 100644
|
| --- a/ui/events/test/events_test_utils_x11.cc
|
| +++ b/ui/events/test/events_test_utils_x11.cc
|
| @@ -135,15 +135,28 @@ XEvent* CreateXInput2Event(int deviceid,
|
|
|
| namespace ui {
|
|
|
| -ScopedXI2Event::ScopedXI2Event() {}
|
| -ScopedXI2Event::~ScopedXI2Event() {
|
| - Cleanup();
|
| +// XInput2 events contain additional data that need to be explicitly freed (see
|
| +// |CreateXInput2Event()|.
|
| +void XEventDeleter::operator()(XEvent* event) {
|
| + if (event->type == GenericEvent) {
|
| + XIDeviceEvent* xiev =
|
| + static_cast<XIDeviceEvent*>(event->xcookie.data);
|
| + if (xiev) {
|
| + delete[] xiev->valuators.mask;
|
| + delete[] xiev->valuators.values;
|
| + delete[] xiev->buttons.mask;
|
| + delete xiev;
|
| + }
|
| + }
|
| + delete event;
|
| }
|
|
|
| +ScopedXI2Event::ScopedXI2Event() {}
|
| +ScopedXI2Event::~ScopedXI2Event() {}
|
| +
|
| void ScopedXI2Event::InitKeyEvent(EventType type,
|
| KeyboardCode key_code,
|
| int flags) {
|
| - Cleanup();
|
| XDisplay* display = gfx::GetXDisplay();
|
| event_.reset(new XEvent);
|
| memset(event_.get(), 0, sizeof(XEvent));
|
| @@ -168,7 +181,6 @@ void ScopedXI2Event::InitKeyEvent(EventType type,
|
| 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);
|
| @@ -179,7 +191,6 @@ void ScopedXI2Event::InitGenericButtonEvent(int deviceid,
|
|
|
| void ScopedXI2Event::InitButtonEvent(EventType type,
|
| int flags) {
|
| - Cleanup();
|
| event_.reset(new XEvent);
|
| memset(event_.get(), 0, sizeof(XEvent));
|
| event_->type = XButtonEventType(type);
|
| @@ -214,7 +225,6 @@ void ScopedXI2Event::InitScrollEvent(int deviceid,
|
| int x_offset_ordinal,
|
| int y_offset_ordinal,
|
| int finger_count) {
|
| - Cleanup();
|
| event_.reset(CreateXInput2Event(deviceid, XI_Motion, 0, gfx::Point()));
|
|
|
| Valuator valuators[] = {
|
| @@ -234,7 +244,6 @@ void ScopedXI2Event::InitFlingScrollEvent(int deviceid,
|
| int x_velocity_ordinal,
|
| int y_velocity_ordinal,
|
| bool is_cancel) {
|
| - Cleanup();
|
| event_.reset(CreateXInput2Event(deviceid, XI_Motion, deviceid, gfx::Point()));
|
|
|
| Valuator valuators[] = {
|
| @@ -254,25 +263,10 @@ void ScopedXI2Event::InitTouchEvent(int deviceid,
|
| int tracking_id,
|
| const gfx::Point& location,
|
| const std::vector<Valuator>& valuators) {
|
| - Cleanup();
|
| event_.reset(CreateXInput2Event(deviceid, evtype, tracking_id, location));
|
| SetUpValuators(valuators);
|
| }
|
|
|
| -void ScopedXI2Event::Cleanup() {
|
| - if (event_.get() && event_->type == GenericEvent) {
|
| - XIDeviceEvent* xiev =
|
| - static_cast<XIDeviceEvent*>(event_->xcookie.data);
|
| - if (xiev) {
|
| - delete[] xiev->valuators.mask;
|
| - delete[] xiev->valuators.values;
|
| - delete[] xiev->buttons.mask;
|
| - delete xiev;
|
| - }
|
| - }
|
| - event_.reset();
|
| -}
|
| -
|
| void ScopedXI2Event::SetUpValuators(const std::vector<Valuator>& valuators) {
|
| CHECK(event_.get());
|
| CHECK_EQ(GenericEvent, event_->type);
|
|
|