diff options
Diffstat (limited to 'x11-base/xorg-server/files/xorg-server-1.10.4-r2-fix_no_coords.patch')
-rw-r--r-- | x11-base/xorg-server/files/xorg-server-1.10.4-r2-fix_no_coords.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/x11-base/xorg-server/files/xorg-server-1.10.4-r2-fix_no_coords.patch b/x11-base/xorg-server/files/xorg-server-1.10.4-r2-fix_no_coords.patch new file mode 100644 index 0000000..c733ad2 --- /dev/null +++ b/x11-base/xorg-server/files/xorg-server-1.10.4-r2-fix_no_coords.patch @@ -0,0 +1,66 @@ +Fix handling of events when the X and Y valuators are not set. This fixes cursor +warping to (0,0) on Wacom button press events. + +Index: xorg-server/dix/getevents.c +=================================================================== +--- xorg-server.orig/dix/getevents.c 2011-08-24 12:56:49.905650624 +0300 ++++ xorg-server/dix/getevents.c 2011-08-24 12:56:49.925650626 +0300 +@@ -1185,31 +1185,37 @@ + } + } + +- if (valuator_mask_isset(&mask, 0)) ++ if (valuator_mask_isset(&mask, 0) || valuator_mask_isset(&mask, 1)) + { +- x = valuator_mask_get(&mask, 0); +- pDev->last.untransformed_x = x; +- } else +- x = pDev->last.untransformed_x; +- if (valuator_mask_isset(&mask, 1)) +- { +- y = valuator_mask_get(&mask, 1); +- pDev->last.untransformed_y = y; +- } else +- y = pDev->last.untransformed_y; ++ if (valuator_mask_isset(&mask, 0)) ++ { ++ x = valuator_mask_get(&mask, 0); ++ pDev->last.untransformed_x = x; ++ } else ++ x = pDev->last.untransformed_x; ++ if (valuator_mask_isset(&mask, 1)) ++ { ++ y = valuator_mask_get(&mask, 1); ++ pDev->last.untransformed_y = y; ++ } else ++ y = pDev->last.untransformed_y; + +- transformAbsolute(pDev, &mask, &x, &y); ++ transformAbsolute(pDev, &mask, &x, &y); + +- if (x != pDev->last.valuators[0]) +- valuator_mask_set(&mask, 0, x); +- else +- valuator_mask_unset(&mask, 0); +- if (y != pDev->last.valuators[1]) +- valuator_mask_set(&mask, 1, y); +- else +- valuator_mask_unset(&mask, 1); ++ if (x != pDev->last.valuators[0]) ++ valuator_mask_set(&mask, 0, x); ++ else ++ valuator_mask_unset(&mask, 0); ++ if (y != pDev->last.valuators[1]) ++ valuator_mask_set(&mask, 1, y); ++ else ++ valuator_mask_unset(&mask, 1); + +- moveAbsolute(pDev, &x, &y, &mask); ++ moveAbsolute(pDev, &x, &y, &mask); ++ } else { ++ x = pDev->last.valuators[0]; ++ y = pDev->last.valuators[1]; ++ } + } else { + if (flags & POINTER_ACCELERATE) { + /* FIXME: Pointer acceleration only requires X and Y values. This |