diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-03 17:36:17 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-03 17:36:17 +0000 |
commit | d6a33346202586b89ff2b21ded91a3dc6a36154a (patch) | |
tree | 93fa84f05001bcddbc7f241adc4c9f76b560b61f /ui | |
parent | faf9955f955767e5256b9deb3ae500eb5695bd98 (diff) | |
download | chromium_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.cc | 39 | ||||
-rw-r--r-- | ui/events/test/events_test_utils_x11.h | 6 |
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); }; |