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

Unified Diff: ui/events/test/events_test_utils_x11.cc

Issue 144423006: Rewrite release event only if press event was rewritten for a given device. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/test/events_test_utils_x11.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 210216b47eed028a24a6cb1e3b35fced4fe9c656..50fc18507a5f389e17291f8df9c2496c0e57e2e8 100644
--- a/ui/events/test/events_test_utils_x11.cc
+++ b/ui/events/test/events_test_utils_x11.cc
@@ -28,6 +28,16 @@ unsigned int XEventState(int flags) {
((flags & ui::EF_RIGHT_MOUSE_BUTTON) ? Button3Mask: 0);
}
+int XButtonNum(int flags) {
sadrul 2014/01/30 02:01:42 Could you use XButtonEventButton() instead?
oshima 2014/01/30 02:12:54 I had to change XButtonEventButton, but I think th
+ if (flags & ui::EF_LEFT_MOUSE_BUTTON)
+ return 1;
+ if (flags & ui::EF_MIDDLE_MOUSE_BUTTON)
+ return 2;
+ if (flags & ui::EF_RIGHT_MOUSE_BUTTON)
+ return 3;
+ return 0;
+}
+
// Converts EventType to XKeyEvent type.
int XKeyEventType(ui::EventType type) {
switch (type) {
@@ -40,6 +50,19 @@ int XKeyEventType(ui::EventType type) {
}
}
+int XIButtonEventType(ui::EventType type) {
+ switch (type) {
+ case ui::ET_MOUSEWHEEL:
+ case ui::ET_MOUSE_PRESSED:
+ // The button release X events for mouse wheels are dropped by Aura.
+ return XI_ButtonPress;
+ case ui::ET_MOUSE_RELEASED:
+ return XI_ButtonRelease;
+ default:
+ return 0;
sadrul 2014/01/30 02:01:42 Should this have a NOTREACHED()?
oshima 2014/01/30 02:12:54 Done.
+ }
+}
+
// Converts EventType to XButtonEvent type.
int XButtonEventType(ui::EventType type) {
switch (type) {
@@ -111,7 +134,11 @@ XEvent* CreateXInput2Event(int deviceid,
xiev->detail = tracking_id;
xiev->event_x = location.x();
xiev->event_y = location.y();
-
+ if (evtype == XI_ButtonPress || evtype == XI_ButtonRelease) {
+ xiev->buttons.mask_len = 8;
+ xiev->buttons.mask = new unsigned char[xiev->buttons.mask_len];
+ memset(xiev->buttons.mask, 0, xiev->buttons.mask_len);
+ }
return event;
}
@@ -149,6 +176,18 @@ void ScopedXI2Event::InitKeyEvent(EventType type,
event_->xkey.same_screen = 1;
}
+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);
+ xievent->mods.effective = XEventState(flags);
+ xievent->detail = XButtonNum(flags);
+ XISetMask(xievent->buttons.mask, xievent->detail);
+}
+
void ScopedXI2Event::InitButtonEvent(EventType type,
int flags) {
Cleanup();
@@ -238,6 +277,7 @@ void ScopedXI2Event::Cleanup() {
if (xiev) {
delete[] xiev->valuators.mask;
delete[] xiev->valuators.values;
+ delete[] xiev->buttons.mask;
delete xiev;
}
}
« 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