summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-03 17:36:17 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-03 17:36:17 +0000
commitd6a33346202586b89ff2b21ded91a3dc6a36154a (patch)
tree93fa84f05001bcddbc7f241adc4c9f76b560b61f /ui
parentfaf9955f955767e5256b9deb3ae500eb5695bd98 (diff)
downloadchromium_src-d6a33346202586b89ff2b21ded91a3dc6a36154a.zip
chromium_src-d6a33346202586b89ff2b21ded91a3dc6a36154a.tar.gz
chromium_src-d6a33346202586b89ff2b21ded91a3dc6a36154a.tar.bz2
x11/test: Use a custom-deleter for the XEvent in ScopedXI2Event.
BUG=none R=sky@chromium.org Review URL: https://codereview.chromium.org/136153006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@248512 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/events/test/events_test_utils_x11.cc39
-rw-r--r--ui/events/test/events_test_utils_x11.h6
2 files changed, 21 insertions, 24 deletions
diff --git a/ui/events/test/events_test_utils_x11.cc b/ui/events/test/events_test_utils_x11.cc
index 20d1c17..f833c21 100644
--- a/ui/events/test/events_test_utils_x11.cc
+++ b/ui/events/test/events_test_utils_x11.cc
@@ -135,15 +135,27 @@ 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)
+ 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() {}
+
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 +180,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 +190,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 +224,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 +243,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 +262,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);
diff --git a/ui/events/test/events_test_utils_x11.h b/ui/events/test/events_test_utils_x11.h
index 0be6fdd..737cf88 100644
--- a/ui/events/test/events_test_utils_x11.h
+++ b/ui/events/test/events_test_utils_x11.h
@@ -24,6 +24,10 @@ struct Valuator {
double value;
};
+struct XEventDeleter {
+ void operator()(XEvent* event);
+};
+
class ScopedXI2Event {
public:
ScopedXI2Event();
@@ -73,7 +77,7 @@ class ScopedXI2Event {
void SetUpValuators(const std::vector<Valuator>& valuators);
- scoped_ptr<XEvent> event_;
+ scoped_ptr<XEvent, XEventDeleter> event_;
DISALLOW_COPY_AND_ASSIGN(ScopedXI2Event);
};