Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 88 int valuator_count = ui::DeviceDataManager::DT_LAST_ENTRY; | 88 int valuator_count = ui::DeviceDataManager::DT_LAST_ENTRY; |
| 89 xiev->valuators.mask_len = (valuator_count / 8) + 1; | 89 xiev->valuators.mask_len = (valuator_count / 8) + 1; |
| 90 xiev->valuators.mask = new unsigned char[xiev->valuators.mask_len]; | 90 xiev->valuators.mask = new unsigned char[xiev->valuators.mask_len]; |
| 91 memset(xiev->valuators.mask, 0, xiev->valuators.mask_len); | 91 memset(xiev->valuators.mask, 0, xiev->valuators.mask_len); |
| 92 xiev->valuators.values = new double[valuator_count]; | 92 xiev->valuators.values = new double[valuator_count]; |
| 93 } | 93 } |
| 94 | 94 |
| 95 XEvent* CreateXInput2Event(int deviceid, | 95 XEvent* CreateXInput2Event(int deviceid, |
| 96 int evtype, | 96 int evtype, |
| 97 int tracking_id, | 97 int tracking_id, |
| 98 const gfx::Point& location) { | 98 const gfx::Point& location, |
| 99 ::Window target) { | |
| 99 XEvent* event = new XEvent; | 100 XEvent* event = new XEvent; |
| 100 memset(event, 0, sizeof(*event)); | 101 memset(event, 0, sizeof(*event)); |
| 101 event->type = GenericEvent; | 102 event->type = GenericEvent; |
| 102 event->xcookie.data = new XIDeviceEvent; | 103 event->xcookie.data = new XIDeviceEvent; |
| 103 XIDeviceEvent* xiev = | 104 XIDeviceEvent* xiev = |
| 104 static_cast<XIDeviceEvent*>(event->xcookie.data); | 105 static_cast<XIDeviceEvent*>(event->xcookie.data); |
| 105 memset(xiev, 0, sizeof(XIDeviceEvent)); | 106 memset(xiev, 0, sizeof(XIDeviceEvent)); |
| 106 xiev->deviceid = deviceid; | 107 xiev->deviceid = deviceid; |
| 107 xiev->sourceid = deviceid; | 108 xiev->sourceid = deviceid; |
| 108 xiev->evtype = evtype; | 109 xiev->evtype = evtype; |
| 109 xiev->detail = tracking_id; | 110 xiev->detail = tracking_id; |
| 110 xiev->event_x = location.x(); | 111 xiev->event_x = location.x(); |
| 111 xiev->event_y = location.y(); | 112 xiev->event_y = location.y(); |
| 113 xiev->event = target; | |
|
sadrul
2014/05/07 20:00:27
Can we always set this to DefaultRootWindow() with
Yufeng Shen (Slow to review)
2014/05/07 22:02:58
Done.
| |
| 112 if (evtype == XI_ButtonPress || evtype == XI_ButtonRelease) { | 114 if (evtype == XI_ButtonPress || evtype == XI_ButtonRelease) { |
| 113 xiev->buttons.mask_len = 8; | 115 xiev->buttons.mask_len = 8; |
| 114 xiev->buttons.mask = new unsigned char[xiev->buttons.mask_len]; | 116 xiev->buttons.mask = new unsigned char[xiev->buttons.mask_len]; |
| 115 memset(xiev->buttons.mask, 0, xiev->buttons.mask_len); | 117 memset(xiev->buttons.mask, 0, xiev->buttons.mask_len); |
| 116 } | 118 } |
| 117 return event; | 119 return event; |
| 118 } | 120 } |
| 119 | 121 |
| 120 } // namespace | 122 } // namespace |
| 121 | 123 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 162 event_->xkey.state = XEventState(flags); | 164 event_->xkey.state = XEventState(flags); |
| 163 event_->xkey.keycode = XKeyEventKeyCode(key_code, flags, display); | 165 event_->xkey.keycode = XKeyEventKeyCode(key_code, flags, display); |
| 164 event_->xkey.same_screen = 1; | 166 event_->xkey.same_screen = 1; |
| 165 } | 167 } |
| 166 | 168 |
| 167 void ScopedXI2Event::InitGenericButtonEvent(int deviceid, | 169 void ScopedXI2Event::InitGenericButtonEvent(int deviceid, |
| 168 EventType type, | 170 EventType type, |
| 169 const gfx::Point& location, | 171 const gfx::Point& location, |
| 170 int flags) { | 172 int flags) { |
| 171 event_.reset(CreateXInput2Event(deviceid, | 173 event_.reset(CreateXInput2Event(deviceid, |
| 172 XIButtonEventType(type), 0, gfx::Point())); | 174 XIButtonEventType(type), 0, gfx::Point(), |
| 175 ::Window())); | |
| 173 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event_->xcookie.data); | 176 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event_->xcookie.data); |
| 174 xievent->mods.effective = XEventState(flags); | 177 xievent->mods.effective = XEventState(flags); |
| 175 xievent->detail = XButtonEventButton(type, flags); | 178 xievent->detail = XButtonEventButton(type, flags); |
| 176 xievent->event_x = location.x(); | 179 xievent->event_x = location.x(); |
| 177 xievent->event_y = location.y(); | 180 xievent->event_y = location.y(); |
| 178 XISetMask(xievent->buttons.mask, xievent->detail); | 181 XISetMask(xievent->buttons.mask, xievent->detail); |
| 179 // Setup an empty valuator list for generic button events. | 182 // Setup an empty valuator list for generic button events. |
| 180 SetUpValuators(std::vector<Valuator>()); | 183 SetUpValuators(std::vector<Valuator>()); |
| 181 } | 184 } |
| 182 | 185 |
| 183 void ScopedXI2Event::InitGenericMouseWheelEvent(int deviceid, | 186 void ScopedXI2Event::InitGenericMouseWheelEvent(int deviceid, |
| 184 int wheel_delta, | 187 int wheel_delta, |
| 185 int flags) { | 188 int flags) { |
| 186 InitGenericButtonEvent(deviceid, ui::ET_MOUSEWHEEL, gfx::Point(), flags); | 189 InitGenericButtonEvent(deviceid, ui::ET_MOUSEWHEEL, gfx::Point(), flags); |
| 187 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event_->xcookie.data); | 190 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event_->xcookie.data); |
| 188 xievent->detail = wheel_delta > 0 ? Button4 : Button5; | 191 xievent->detail = wheel_delta > 0 ? Button4 : Button5; |
| 189 } | 192 } |
| 190 | 193 |
| 191 void ScopedXI2Event::InitScrollEvent(int deviceid, | 194 void ScopedXI2Event::InitScrollEvent(int deviceid, |
| 192 int x_offset, | 195 int x_offset, |
| 193 int y_offset, | 196 int y_offset, |
| 194 int x_offset_ordinal, | 197 int x_offset_ordinal, |
| 195 int y_offset_ordinal, | 198 int y_offset_ordinal, |
| 196 int finger_count) { | 199 int finger_count) { |
| 197 event_.reset(CreateXInput2Event(deviceid, XI_Motion, 0, gfx::Point())); | 200 event_.reset(CreateXInput2Event(deviceid, XI_Motion, 0, gfx::Point(), |
| 201 ::Window())); | |
| 198 | 202 |
| 199 Valuator valuators[] = { | 203 Valuator valuators[] = { |
| 200 Valuator(DeviceDataManager::DT_CMT_SCROLL_X, x_offset), | 204 Valuator(DeviceDataManager::DT_CMT_SCROLL_X, x_offset), |
| 201 Valuator(DeviceDataManager::DT_CMT_SCROLL_Y, y_offset), | 205 Valuator(DeviceDataManager::DT_CMT_SCROLL_Y, y_offset), |
| 202 Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_offset_ordinal), | 206 Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_offset_ordinal), |
| 203 Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_offset_ordinal), | 207 Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_offset_ordinal), |
| 204 Valuator(DeviceDataManager::DT_CMT_FINGER_COUNT, finger_count) | 208 Valuator(DeviceDataManager::DT_CMT_FINGER_COUNT, finger_count) |
| 205 }; | 209 }; |
| 206 SetUpValuators( | 210 SetUpValuators( |
| 207 std::vector<Valuator>(valuators, valuators + arraysize(valuators))); | 211 std::vector<Valuator>(valuators, valuators + arraysize(valuators))); |
| 208 } | 212 } |
| 209 | 213 |
| 210 void ScopedXI2Event::InitFlingScrollEvent(int deviceid, | 214 void ScopedXI2Event::InitFlingScrollEvent(int deviceid, |
| 211 int x_velocity, | 215 int x_velocity, |
| 212 int y_velocity, | 216 int y_velocity, |
| 213 int x_velocity_ordinal, | 217 int x_velocity_ordinal, |
| 214 int y_velocity_ordinal, | 218 int y_velocity_ordinal, |
| 215 bool is_cancel) { | 219 bool is_cancel) { |
| 216 event_.reset(CreateXInput2Event(deviceid, XI_Motion, deviceid, gfx::Point())); | 220 event_.reset(CreateXInput2Event(deviceid, XI_Motion, deviceid, gfx::Point(), |
| 221 ::Window())); | |
| 217 | 222 |
| 218 Valuator valuators[] = { | 223 Valuator valuators[] = { |
| 219 Valuator(DeviceDataManager::DT_CMT_FLING_STATE, is_cancel ? 1 : 0), | 224 Valuator(DeviceDataManager::DT_CMT_FLING_STATE, is_cancel ? 1 : 0), |
| 220 Valuator(DeviceDataManager::DT_CMT_FLING_Y, y_velocity), | 225 Valuator(DeviceDataManager::DT_CMT_FLING_Y, y_velocity), |
| 221 Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_velocity_ordinal), | 226 Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_velocity_ordinal), |
| 222 Valuator(DeviceDataManager::DT_CMT_FLING_X, x_velocity), | 227 Valuator(DeviceDataManager::DT_CMT_FLING_X, x_velocity), |
| 223 Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_velocity_ordinal) | 228 Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_velocity_ordinal) |
| 224 }; | 229 }; |
| 225 | 230 |
| 226 SetUpValuators( | 231 SetUpValuators( |
| 227 std::vector<Valuator>(valuators, valuators + arraysize(valuators))); | 232 std::vector<Valuator>(valuators, valuators + arraysize(valuators))); |
| 228 } | 233 } |
| 229 | 234 |
| 230 void ScopedXI2Event::InitTouchEvent(int deviceid, | 235 void ScopedXI2Event::InitTouchEvent(int deviceid, |
| 231 int evtype, | 236 int evtype, |
| 232 int tracking_id, | 237 int tracking_id, |
| 233 const gfx::Point& location, | 238 const gfx::Point& location, |
| 234 const std::vector<Valuator>& valuators) { | 239 const std::vector<Valuator>& valuators, |
| 235 event_.reset(CreateXInput2Event(deviceid, evtype, tracking_id, location)); | 240 ::Window target) { |
| 241 event_.reset(CreateXInput2Event(deviceid, evtype, tracking_id, location, | |
| 242 target)); | |
| 236 SetUpValuators(valuators); | 243 SetUpValuators(valuators); |
| 237 } | 244 } |
| 238 | 245 |
| 239 void ScopedXI2Event::SetUpValuators(const std::vector<Valuator>& valuators) { | 246 void ScopedXI2Event::SetUpValuators(const std::vector<Valuator>& valuators) { |
| 240 CHECK(event_.get()); | 247 CHECK(event_.get()); |
| 241 CHECK_EQ(GenericEvent, event_->type); | 248 CHECK_EQ(GenericEvent, event_->type); |
| 242 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(event_->xcookie.data); | 249 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(event_->xcookie.data); |
| 243 InitValuatorsForXIDeviceEvent(xiev); | 250 InitValuatorsForXIDeviceEvent(xiev); |
| 244 ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance(); | 251 ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance(); |
| 245 for (size_t i = 0; i < valuators.size(); ++i) { | 252 for (size_t i = 0; i < valuators.size(); ++i) { |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 257 manager->SetDeviceListForTest(std::vector<unsigned int>(), device_list); | 264 manager->SetDeviceListForTest(std::vector<unsigned int>(), device_list); |
| 258 } | 265 } |
| 259 | 266 |
| 260 void SetUpTouchDevicesForTest(const std::vector<unsigned int>& devices) { | 267 void SetUpTouchDevicesForTest(const std::vector<unsigned int>& devices) { |
| 261 TouchFactory::GetInstance()->SetTouchDeviceForTest(devices); | 268 TouchFactory::GetInstance()->SetTouchDeviceForTest(devices); |
| 262 ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance(); | 269 ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance(); |
| 263 manager->SetDeviceListForTest(devices, std::vector<unsigned int>()); | 270 manager->SetDeviceListForTest(devices, std::vector<unsigned int>()); |
| 264 } | 271 } |
| 265 | 272 |
| 266 } // namespace ui | 273 } // namespace ui |
| OLD | NEW |