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 f833c21e0fdc945134873fa710094b114768262e..20d1c17da5057eeb33216b0a5232bdd1319b671a 100644 |
--- a/ui/events/test/events_test_utils_x11.cc |
+++ b/ui/events/test/events_test_utils_x11.cc |
@@ -135,27 +135,15 @@ |
namespace ui { |
-// XInput2 events contain additional data that need to be explicitly freed (see |
-// |CreateXInput2Event()|. |
-void XEventDeleter::operator()(XEvent* event) { |
- if (event->type != GenericEvent) |
- return; |
- XIDeviceEvent* xiev = |
- static_cast<XIDeviceEvent*>(event->xcookie.data); |
- if (xiev) { |
- delete[] xiev->valuators.mask; |
- delete[] xiev->valuators.values; |
- delete[] xiev->buttons.mask; |
- delete xiev; |
- } |
-} |
- |
ScopedXI2Event::ScopedXI2Event() {} |
-ScopedXI2Event::~ScopedXI2Event() {} |
+ScopedXI2Event::~ScopedXI2Event() { |
+ Cleanup(); |
+} |
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)); |
@@ -180,6 +168,7 @@ |
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); |
@@ -190,6 +179,7 @@ |
void ScopedXI2Event::InitButtonEvent(EventType type, |
int flags) { |
+ Cleanup(); |
event_.reset(new XEvent); |
memset(event_.get(), 0, sizeof(XEvent)); |
event_->type = XButtonEventType(type); |
@@ -224,6 +214,7 @@ |
int x_offset_ordinal, |
int y_offset_ordinal, |
int finger_count) { |
+ Cleanup(); |
event_.reset(CreateXInput2Event(deviceid, XI_Motion, 0, gfx::Point())); |
Valuator valuators[] = { |
@@ -243,6 +234,7 @@ |
int x_velocity_ordinal, |
int y_velocity_ordinal, |
bool is_cancel) { |
+ Cleanup(); |
event_.reset(CreateXInput2Event(deviceid, XI_Motion, deviceid, gfx::Point())); |
Valuator valuators[] = { |
@@ -262,8 +254,23 @@ |
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) { |