From d706dd8e98d53f0a139836fd8996a9c23b1df384 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Jul 04 2013 05:30:27 +0000 Subject: xorg-server 1.4.2 - drop merged patches - Add a quirk to set the synaptics resolution to 0 by default. The pre-scale patch in the server clashes with synaptics inaccurate resolution numbers, causing the touchpad movement to be stunted. --- diff --git a/.gitignore b/.gitignore index b7a5984..f287ed3 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ xorg-server-1.9.1.tar.bz2 /xorg-server-1.14.0.tar.bz2 /xorg-server-1.14.1.tar.bz2 /xorg-server-1.14.1.901.tar.bz2 +/xorg-server-1.14.2.tar.bz2 diff --git a/0001-dix-plug-memory-leak-in-freeing-TouchClass.patch b/0001-dix-plug-memory-leak-in-freeing-TouchClass.patch deleted file mode 100644 index e3900a3..0000000 --- a/0001-dix-plug-memory-leak-in-freeing-TouchClass.patch +++ /dev/null @@ -1,31 +0,0 @@ -From bf115aa906795df872104083c1187c126c3b1d76 Mon Sep 17 00:00:00 2001 -From: Peter Hutterer -Date: Wed, 17 Apr 2013 19:47:42 +1000 -Subject: [PATCH 01/35] dix: plug memory leak in freeing TouchClass - -==15562== 1,800 bytes in 1 blocks are definitely lost in loss record 298 of 330 -==15562== at 0x4A06B6F: calloc (vg_replace_malloc.c:593) -==15562== by 0x4312C7: InitTouchClassDeviceStruct (devices.c:1644) - -Signed-off-by: Peter Hutterer -Reviewed-by: Alan Coopersmith -(cherry picked from commit 7d722796c678532e8c5897c673c43184da353f44) ---- - dix/devices.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/dix/devices.c b/dix/devices.c -index be236dd..85961a0 100644 ---- a/dix/devices.c -+++ b/dix/devices.c -@@ -795,6 +795,7 @@ FreeDeviceClass(int type, pointer *class) - free((*t)->touches[i].valuators); - } - -+ free((*t)->touches); - free((*t)); - break; - } --- -1.8.2.1 - diff --git a/0002-dix-don-t-overwrite-proximity-focus-classes.patch b/0002-dix-don-t-overwrite-proximity-focus-classes.patch deleted file mode 100644 index 5b311c8..0000000 --- a/0002-dix-don-t-overwrite-proximity-focus-classes.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 8cc686735296f1ff32089e64f78dfee46b8e7149 Mon Sep 17 00:00:00 2001 -From: Peter Hutterer -Date: Thu, 9 May 2013 14:30:49 +1000 -Subject: [PATCH 02/35] dix: don't overwrite proximity/focus classes - -InitPointerClassDeviceStruct/InitKeyboardDeviceStruct allocate a -proximity/focus class, respectively. If a driver calls -InitFocusClassDeviceStruct or InitProximityClassDeviceStruct beforehand, -the previously allocated class is overwritten, leaking the memory. - -Neither takes a parameter other than the device, so we can simply skip -initialising it if we already have one. - -Signed-off-by: Peter Hutterer -Reviewed-by: Dave Airlie -(cherry picked from commit 8a88b0ab52ba375ae84463a90503db88af10e368) ---- - dix/devices.c | 2 +- - xkb/xkbInit.c | 3 ++- - 2 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/dix/devices.c b/dix/devices.c -index 85961a0..b2db4aa 100644 ---- a/dix/devices.c -+++ b/dix/devices.c -@@ -1366,7 +1366,7 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels, - valc->numMotionEvents = numMotionEvents; - valc->motionHintWindow = NullWindow; - -- if (mode & OutOfProximity) -+ if ((mode & OutOfProximity) && !dev->proximity) - InitProximityClassDeviceStruct(dev); - - dev->valuator = valc; -diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c -index 4e8e267..ed01114 100644 ---- a/xkb/xkbInit.c -+++ b/xkb/xkbInit.c -@@ -574,7 +574,8 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet * rmlvo, - XkbUpdateActions(dev, xkb->min_key_code, XkbNumKeys(xkb), &changes, - &check, &cause); - -- InitFocusClassDeviceStruct(dev); -+ if (!dev->focus) -+ InitFocusClassDeviceStruct(dev); - - xkbi->kbdProc = ctrl_func; - dev->kbdfeed->BellProc = bell_func; --- -1.8.2.1 - diff --git a/0003-os-Reset-input-buffer-s-ignoreBytes-field.patch b/0003-os-Reset-input-buffer-s-ignoreBytes-field.patch deleted file mode 100644 index da2fa36..0000000 --- a/0003-os-Reset-input-buffer-s-ignoreBytes-field.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 57f6dbb3032b934a39c15cd1980b345f477ce1e6 Mon Sep 17 00:00:00 2001 -From: Robert Morell -Date: Thu, 9 May 2013 13:09:02 -0700 -Subject: [PATCH 03/35] os: Reset input buffer's 'ignoreBytes' field - -If a client sends a request larger than maxBigRequestSize, the server is -supposed to ignore it. - -Before commit cf88363d, the server would simply disconnect the client. After -that commit, it attempts to gracefully ignore the request by remembering how -long the client specified the request to be, and ignoring that many bytes. -However, if a client sends a BigReq header with a large size and disconnects -before actually sending the rest of the specified request, the server will -reuse the ConnectionInput buffer without resetting the ignoreBytes field. This -makes the server ignore new X clients' requests. - -This fixes that behavior by resetting the ignoreBytes field when putting the -ConnectionInput buffer back on the FreeInputs list. - -Signed-off-by: Robert Morell -Reviewed-by: Peter Hutterer -Signed-off-by: Peter Hutterer -(cherry picked from commit 67c66606c760c263d7a4c2d1bba43ed6225a4e7c) ---- - os/io.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/os/io.c b/os/io.c -index 2f091c4..0d980ab 100644 ---- a/os/io.c -+++ b/os/io.c -@@ -1063,6 +1063,7 @@ FreeOsBuffers(OsCommPtr oc) - oci->bufptr = oci->buffer; - oci->bufcnt = 0; - oci->lenLastReq = 0; -+ oci->ignoreBytes = 0; - } - } - if ((oco = oc->output)) { --- -1.8.2.1 - diff --git a/0005-dix-fix-device-scaling-to-use-a-min-max-range.patch b/0005-dix-fix-device-scaling-to-use-a-min-max-range.patch deleted file mode 100644 index 6781784..0000000 --- a/0005-dix-fix-device-scaling-to-use-a-min-max-range.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 31e066546fd085725cc29e95867a04c70ce46ebc Mon Sep 17 00:00:00 2001 -From: Peter Hutterer -Date: Fri, 26 Apr 2013 15:10:08 +1000 -Subject: [PATCH 05/35] dix: fix device scaling to use a [min,max[ range. - -defmin/defmax are screen coords and thus use a min-inclusive, max-exclusive -range. device axes ranges are inclusive, so bump the max up by one to get the -scaling right. - -This fixes off-by-one coordinate errors if the coordinate matrix is used to -bind the device to a fraction of the screen. It introduces an off-by-one -scaling error in the device coordinate range, but since most devices have a -higher resolution than the screen (e.g. a Wacom I4 has 5080 dpi) the effect -of this should be limited. - -This error manifests when we have numScreens > 1, as the scaling from -desktop size back to screen size drops one device unit. - -Signed-off-by: Peter Hutterer -(cherry picked from commit 756ab88d93542f0589c9bf46f40ccc57df64f0fd) ---- - dix/devices.c | 4 ++-- - dix/getevents.c | 14 ++++++++++---- - 2 files changed, 12 insertions(+), 6 deletions(-) - -diff --git a/dix/devices.c b/dix/devices.c -index b2db4aa..a0d545a 100644 ---- a/dix/devices.c -+++ b/dix/devices.c -@@ -112,8 +112,8 @@ DeviceSetTransform(DeviceIntPtr dev, float *transform_data) - * Transform is the user supplied (affine) transform - * InvScale scales coordinates back up into their native range - */ -- sx = dev->valuator->axes[0].max_value - dev->valuator->axes[0].min_value; -- sy = dev->valuator->axes[1].max_value - dev->valuator->axes[1].min_value; -+ sx = dev->valuator->axes[0].max_value - dev->valuator->axes[0].min_value + 1; -+ sy = dev->valuator->axes[1].max_value - dev->valuator->axes[1].min_value + 1; - - /* invscale */ - pixman_f_transform_init_scale(&scale, sx, sy); -diff --git a/dix/getevents.c b/dix/getevents.c -index ac0ccb2..51d4fd4 100644 ---- a/dix/getevents.c -+++ b/dix/getevents.c -@@ -298,11 +298,11 @@ rescaleValuatorAxis(double coord, AxisInfoPtr from, AxisInfoPtr to, - - if (from && from->min_value < from->max_value) { - fmin = from->min_value; -- fmax = from->max_value; -+ fmax = from->max_value + 1; - } - if (to && to->min_value < to->max_value) { - tmin = to->min_value; -- tmax = to->max_value; -+ tmax = to->max_value + 1; - } - - if (fmin == tmin && fmax == tmax) -@@ -924,9 +924,9 @@ scale_to_desktop(DeviceIntPtr dev, ValuatorMask *mask, - - /* scale x&y to desktop coordinates */ - *screenx = rescaleValuatorAxis(x, dev->valuator->axes + 0, NULL, -- screenInfo.x, screenInfo.width - 1); -+ screenInfo.x, screenInfo.width); - *screeny = rescaleValuatorAxis(y, dev->valuator->axes + 1, NULL, -- screenInfo.y, screenInfo.height - 1); -+ screenInfo.y, screenInfo.height); - - *devx = x; - *devy = y; -@@ -1366,6 +1366,12 @@ QueuePointerEvents(DeviceIntPtr device, int type, - * is the last coordinate on the first screen and must be rescaled for the - * event to be m. XI2 clients that do their own coordinate mapping would - * otherwise interpret the position of the device elsewere to the cursor. -+ * However, this scaling leads to losses: -+ * if we have two ScreenRecs we scale from e.g. [0..44704] (Wacom I4) to -+ * [0..2048[. that gives us 2047.954 as desktop coord, or the per-screen -+ * coordinate 1023.954. Scaling that back into the device coordinate range -+ * gives us 44703. So off by one device unit. It's a bug, but we'll have to -+ * live with it because with all this scaling, we just cannot win. - * - * @return the number of events written into events. - */ --- -1.8.2.1 - diff --git a/10-quirks.conf b/10-quirks.conf index c9b823c..63879f8 100644 --- a/10-quirks.conf +++ b/10-quirks.conf @@ -52,3 +52,20 @@ Section "InputClass" MatchDriver "evdev" Option "TypeName" "MOUSE" EndSection + +# synaptics resolution and axis dimensions are not representative of the +# actual device dimensions, partially because what the kernel exports as +# axis range is the what "fingers of typical size are used on TouchPads +# mounted in typical bezel" produce (synaptics interfacing guide, p 23). +# Even with the axis ranges corrected to what (my) touchpad actually +# produces, the values are even further off, essentially stopping Y +# movement if the server takes resolution into account. +# So for the sake of my sanity, disable synaptics axis resolution by default +# so the server can take the resolution from good devices and use that +# for adjusting movement +Section "InputClass" + Identifier "Synaptics resolution set to 0" + MatchDriver "synaptics" + Option "VertResolution" "0" + Option "HorizResolution" "0" +EndSection diff --git a/sources b/sources index 50ce7a2..caf9098 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -4f231ad29ce44f3718cc1bf3b357dbb4 xorg-server-1.14.1.901.tar.bz2 +5d36a6483e8e301875131e8302c67727 xorg-server-1.14.2.tar.bz2 diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index dfab9fc..eb232fc 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -41,8 +41,8 @@ Summary: X.Org X11 X server Name: xorg-x11-server -Version: 1.14.1.901 -Release: 2%{?gitdate:.%{gitdate}}%{dist} +Version: 1.14.2 +Release: 1%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -106,11 +106,7 @@ Patch7064: 0001-mieq-Bump-default-queue-size-to-512.patch # touch-grab-race condition bug backports # https://bugs.freedesktop.org/show_bug.cgi?id=56578 -Patch8000: 0001-dix-plug-memory-leak-in-freeing-TouchClass.patch -Patch8001: 0002-dix-don-t-overwrite-proximity-focus-classes.patch -Patch8002: 0003-os-Reset-input-buffer-s-ignoreBytes-field.patch Patch8003: 0004-dix-pre-scale-x-by-the-screen-device-resolution-rati.patch -Patch8004: 0005-dix-fix-device-scaling-to-use-a-min-max-range.patch Patch8005: 0006-Xi-not-having-an-ownership-mask-does-not-mean-automa.patch Patch8006: 0007-dix-don-t-prepend-an-activated-passive-grab-to-the-l.patch Patch8007: 0008-Xi-if-we-delivered-a-TouchEnd-to-a-passive-grab-end-.patch @@ -620,6 +616,13 @@ rm -rf $RPM_BUILD_ROOT %{xserver_source_dir} %changelog +* Thu Jul 04 2013 Peter Hutterer 1.14.2-1 +- xorg-server 1.4.2 +- drop merged patches +- Add a quirk to set the synaptics resolution to 0 by default. The pre-scale + patch in the server clashes with synaptics inaccurate resolution numbers, + causing the touchpad movement to be stunted. + * Thu Jun 06 2013 Peter Hutterer 1.14.1.901-2 - Backport the touch grab race condition patches from fdo #56578