Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1077)

Side by Side Diff: ui/events/test/events_test_utils_x11.cc

Issue 136153006: x11/test: Use a custom-deleter for the stored XEvent. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/events/test/events_test_utils_x11.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/events/test/events_test_utils_x11.h" 5 #include "ui/events/test/events_test_utils_x11.h"
6 6
7 #include <X11/extensions/XI2.h> 7 #include <X11/extensions/XI2.h>
8 #include <X11/keysym.h> 8 #include <X11/keysym.h>
9 #include <X11/X.h> 9 #include <X11/X.h>
10 #include <X11/Xlib.h> 10 #include <X11/Xlib.h>
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 xiev->buttons.mask = new unsigned char[xiev->buttons.mask_len]; 128 xiev->buttons.mask = new unsigned char[xiev->buttons.mask_len];
129 memset(xiev->buttons.mask, 0, xiev->buttons.mask_len); 129 memset(xiev->buttons.mask, 0, xiev->buttons.mask_len);
130 } 130 }
131 return event; 131 return event;
132 } 132 }
133 133
134 } // namespace 134 } // namespace
135 135
136 namespace ui { 136 namespace ui {
137 137
138 void XEventDeleter::operator()(XEvent* event) {
sky 2014/02/03 04:48:31 Can you add some comments as to why this is necess
sadrul 2014/02/03 15:58:18 Done (added a comment explaining why this is neces
139 if (event->type != GenericEvent)
140 return;
141 XIDeviceEvent* xiev =
142 static_cast<XIDeviceEvent*>(event->xcookie.data);
143 if (xiev) {
144 delete[] xiev->valuators.mask;
145 delete[] xiev->valuators.values;
146 delete[] xiev->buttons.mask;
147 delete xiev;
148 }
149 }
150
138 ScopedXI2Event::ScopedXI2Event() {} 151 ScopedXI2Event::ScopedXI2Event() {}
139 ScopedXI2Event::~ScopedXI2Event() { 152 ScopedXI2Event::~ScopedXI2Event() {}
140 Cleanup();
141 }
142 153
143 void ScopedXI2Event::InitKeyEvent(EventType type, 154 void ScopedXI2Event::InitKeyEvent(EventType type,
144 KeyboardCode key_code, 155 KeyboardCode key_code,
145 int flags) { 156 int flags) {
146 Cleanup();
147 XDisplay* display = gfx::GetXDisplay(); 157 XDisplay* display = gfx::GetXDisplay();
148 event_.reset(new XEvent); 158 event_.reset(new XEvent);
149 memset(event_.get(), 0, sizeof(XEvent)); 159 memset(event_.get(), 0, sizeof(XEvent));
150 event_->type = XKeyEventType(type); 160 event_->type = XKeyEventType(type);
151 CHECK_NE(0, event_->type); 161 CHECK_NE(0, event_->type);
152 event_->xkey.serial = 0; 162 event_->xkey.serial = 0;
153 event_->xkey.send_event = 0; 163 event_->xkey.send_event = 0;
154 event_->xkey.display = display; 164 event_->xkey.display = display;
155 event_->xkey.time = 0; 165 event_->xkey.time = 0;
156 event_->xkey.window = 0; 166 event_->xkey.window = 0;
157 event_->xkey.root = 0; 167 event_->xkey.root = 0;
158 event_->xkey.subwindow = 0; 168 event_->xkey.subwindow = 0;
159 event_->xkey.x = 0; 169 event_->xkey.x = 0;
160 event_->xkey.y = 0; 170 event_->xkey.y = 0;
161 event_->xkey.x_root = 0; 171 event_->xkey.x_root = 0;
162 event_->xkey.y_root = 0; 172 event_->xkey.y_root = 0;
163 event_->xkey.state = XEventState(flags); 173 event_->xkey.state = XEventState(flags);
164 event_->xkey.keycode = XKeyEventKeyCode(key_code, flags, display); 174 event_->xkey.keycode = XKeyEventKeyCode(key_code, flags, display);
165 event_->xkey.same_screen = 1; 175 event_->xkey.same_screen = 1;
166 } 176 }
167 177
168 void ScopedXI2Event::InitGenericButtonEvent(int deviceid, 178 void ScopedXI2Event::InitGenericButtonEvent(int deviceid,
169 EventType type, 179 EventType type,
170 int flags) { 180 int flags) {
171 Cleanup();
172 event_.reset(CreateXInput2Event(deviceid, 181 event_.reset(CreateXInput2Event(deviceid,
173 XIButtonEventType(type), 0, gfx::Point())); 182 XIButtonEventType(type), 0, gfx::Point()));
174 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event_->xcookie.data); 183 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event_->xcookie.data);
175 xievent->mods.effective = XEventState(flags); 184 xievent->mods.effective = XEventState(flags);
176 xievent->detail = XButtonEventButton(type, flags); 185 xievent->detail = XButtonEventButton(type, flags);
177 XISetMask(xievent->buttons.mask, xievent->detail); 186 XISetMask(xievent->buttons.mask, xievent->detail);
178 } 187 }
179 188
180 void ScopedXI2Event::InitButtonEvent(EventType type, 189 void ScopedXI2Event::InitButtonEvent(EventType type,
181 int flags) { 190 int flags) {
182 Cleanup();
183 event_.reset(new XEvent); 191 event_.reset(new XEvent);
184 memset(event_.get(), 0, sizeof(XEvent)); 192 memset(event_.get(), 0, sizeof(XEvent));
185 event_->type = XButtonEventType(type); 193 event_->type = XButtonEventType(type);
186 CHECK_NE(0, event_->type); 194 CHECK_NE(0, event_->type);
187 event_->xbutton.serial = 0; 195 event_->xbutton.serial = 0;
188 event_->xbutton.send_event = 0; 196 event_->xbutton.send_event = 0;
189 event_->xbutton.display = gfx::GetXDisplay(); 197 event_->xbutton.display = gfx::GetXDisplay();
190 event_->xbutton.time = 0; 198 event_->xbutton.time = 0;
191 event_->xbutton.window = 0; 199 event_->xbutton.window = 0;
192 event_->xbutton.root = 0; 200 event_->xbutton.root = 0;
(...skipping 14 matching lines...) Expand all
207 // at the moment. 215 // at the moment.
208 event_->xbutton.button = wheel_delta > 0 ? Button4 : Button5; 216 event_->xbutton.button = wheel_delta > 0 ? Button4 : Button5;
209 } 217 }
210 218
211 void ScopedXI2Event::InitScrollEvent(int deviceid, 219 void ScopedXI2Event::InitScrollEvent(int deviceid,
212 int x_offset, 220 int x_offset,
213 int y_offset, 221 int y_offset,
214 int x_offset_ordinal, 222 int x_offset_ordinal,
215 int y_offset_ordinal, 223 int y_offset_ordinal,
216 int finger_count) { 224 int finger_count) {
217 Cleanup();
218 event_.reset(CreateXInput2Event(deviceid, XI_Motion, 0, gfx::Point())); 225 event_.reset(CreateXInput2Event(deviceid, XI_Motion, 0, gfx::Point()));
219 226
220 Valuator valuators[] = { 227 Valuator valuators[] = {
221 Valuator(DeviceDataManager::DT_CMT_SCROLL_X, x_offset), 228 Valuator(DeviceDataManager::DT_CMT_SCROLL_X, x_offset),
222 Valuator(DeviceDataManager::DT_CMT_SCROLL_Y, y_offset), 229 Valuator(DeviceDataManager::DT_CMT_SCROLL_Y, y_offset),
223 Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_offset_ordinal), 230 Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_offset_ordinal),
224 Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_offset_ordinal), 231 Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_offset_ordinal),
225 Valuator(DeviceDataManager::DT_CMT_FINGER_COUNT, finger_count) 232 Valuator(DeviceDataManager::DT_CMT_FINGER_COUNT, finger_count)
226 }; 233 };
227 SetUpValuators( 234 SetUpValuators(
228 std::vector<Valuator>(valuators, valuators + arraysize(valuators))); 235 std::vector<Valuator>(valuators, valuators + arraysize(valuators)));
229 } 236 }
230 237
231 void ScopedXI2Event::InitFlingScrollEvent(int deviceid, 238 void ScopedXI2Event::InitFlingScrollEvent(int deviceid,
232 int x_velocity, 239 int x_velocity,
233 int y_velocity, 240 int y_velocity,
234 int x_velocity_ordinal, 241 int x_velocity_ordinal,
235 int y_velocity_ordinal, 242 int y_velocity_ordinal,
236 bool is_cancel) { 243 bool is_cancel) {
237 Cleanup();
238 event_.reset(CreateXInput2Event(deviceid, XI_Motion, deviceid, gfx::Point())); 244 event_.reset(CreateXInput2Event(deviceid, XI_Motion, deviceid, gfx::Point()));
239 245
240 Valuator valuators[] = { 246 Valuator valuators[] = {
241 Valuator(DeviceDataManager::DT_CMT_FLING_STATE, is_cancel ? 1 : 0), 247 Valuator(DeviceDataManager::DT_CMT_FLING_STATE, is_cancel ? 1 : 0),
242 Valuator(DeviceDataManager::DT_CMT_FLING_Y, y_velocity), 248 Valuator(DeviceDataManager::DT_CMT_FLING_Y, y_velocity),
243 Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_velocity_ordinal), 249 Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_velocity_ordinal),
244 Valuator(DeviceDataManager::DT_CMT_FLING_X, x_velocity), 250 Valuator(DeviceDataManager::DT_CMT_FLING_X, x_velocity),
245 Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_velocity_ordinal) 251 Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_velocity_ordinal)
246 }; 252 };
247 253
248 SetUpValuators( 254 SetUpValuators(
249 std::vector<Valuator>(valuators, valuators + arraysize(valuators))); 255 std::vector<Valuator>(valuators, valuators + arraysize(valuators)));
250 } 256 }
251 257
252 void ScopedXI2Event::InitTouchEvent(int deviceid, 258 void ScopedXI2Event::InitTouchEvent(int deviceid,
253 int evtype, 259 int evtype,
254 int tracking_id, 260 int tracking_id,
255 const gfx::Point& location, 261 const gfx::Point& location,
256 const std::vector<Valuator>& valuators) { 262 const std::vector<Valuator>& valuators) {
257 Cleanup();
258 event_.reset(CreateXInput2Event(deviceid, evtype, tracking_id, location)); 263 event_.reset(CreateXInput2Event(deviceid, evtype, tracking_id, location));
259 SetUpValuators(valuators); 264 SetUpValuators(valuators);
260 } 265 }
261 266
262 void ScopedXI2Event::Cleanup() {
263 if (event_.get() && event_->type == GenericEvent) {
264 XIDeviceEvent* xiev =
265 static_cast<XIDeviceEvent*>(event_->xcookie.data);
266 if (xiev) {
267 delete[] xiev->valuators.mask;
268 delete[] xiev->valuators.values;
269 delete[] xiev->buttons.mask;
270 delete xiev;
271 }
272 }
273 event_.reset();
274 }
275
276 void ScopedXI2Event::SetUpValuators(const std::vector<Valuator>& valuators) { 267 void ScopedXI2Event::SetUpValuators(const std::vector<Valuator>& valuators) {
277 CHECK(event_.get()); 268 CHECK(event_.get());
278 CHECK_EQ(GenericEvent, event_->type); 269 CHECK_EQ(GenericEvent, event_->type);
279 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(event_->xcookie.data); 270 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(event_->xcookie.data);
280 InitValuatorsForXIDeviceEvent(xiev); 271 InitValuatorsForXIDeviceEvent(xiev);
281 ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance(); 272 ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance();
282 for (size_t i = 0; i < valuators.size(); ++i) { 273 for (size_t i = 0; i < valuators.size(); ++i) {
283 manager->SetValuatorDataForTest(xiev, valuators[i].data_type, 274 manager->SetValuatorDataForTest(xiev, valuators[i].data_type,
284 valuators[i].value); 275 valuators[i].value);
285 } 276 }
286 } 277 }
287 278
288 void SetUpScrollDeviceForTest(unsigned int deviceid) { 279 void SetUpScrollDeviceForTest(unsigned int deviceid) {
289 std::vector<unsigned int> device_list; 280 std::vector<unsigned int> device_list;
290 device_list.push_back(deviceid); 281 device_list.push_back(deviceid);
291 282
292 TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); 283 TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list);
293 ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance(); 284 ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance();
294 manager->SetDeviceListForTest(std::vector<unsigned int>(), device_list); 285 manager->SetDeviceListForTest(std::vector<unsigned int>(), device_list);
295 } 286 }
296 287
297 void SetUpTouchDevicesForTest(const std::vector<unsigned int>& devices) { 288 void SetUpTouchDevicesForTest(const std::vector<unsigned int>& devices) {
298 TouchFactory::GetInstance()->SetTouchDeviceForTest(devices); 289 TouchFactory::GetInstance()->SetTouchDeviceForTest(devices);
299 ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance(); 290 ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance();
300 manager->SetDeviceListForTest(devices, std::vector<unsigned int>()); 291 manager->SetDeviceListForTest(devices, std::vector<unsigned int>());
301 } 292 }
302 293
303 } // namespace ui 294 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/test/events_test_utils_x11.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698