Package: xserver-xorg-input-wacom
Version: 0.10.3+20100109-1
Severity: normal
Tags: patch
Hi,
it appears that setting tvResolutions through either of 'xsetwacom' or
'xinput set-int-prop' is impossible for any TwinView value. Any such
attempt returns BadInt error.
The problem appears to be in sanity checks for the received values in
wacom drivers: it was required for both sums of widths and heights of
monitors to be equal to xinerama screen size. This permits for only very
strange screen layouts, like this:
+---+----+
| 1 | |
+---+----+
| | 2 |
+---+----+
The attached patch fixes the checks to a more reasonable behaviour
(which depends on whether monitors are reported to be arranged
horizontally or vertically).
This led to a second problem in xsetwacom: initially tvResolutions is
set to [0,0,0,0], which means "autodetect". Thus, sending either
TVResolution0, or TVResolution1 would yield values that will not pass
the checks. (One can bypass this bug by giving 4 values to xsetwacom
set ... TVResolution0). I assume a reasonable bypass would be to remove
parameter TVResolution1 from xsetwacom altogether and rename
TVResolution0 to TVResolutions. I assume that changing interface is
possible, since I see no way this parameter could be used before.
This suggested change is also in the attached patch.
Cheers,
-- Danya.
-- System Information:
Debian Release: squeeze/sid
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable'), (500, 'stable')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.30-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=C, LC_CTYPE=ru_RU.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages xserver-xorg-input-wacom depends on:
ii libc6 2.10.2-2 GNU C Library: Shared libraries
ii libx11-6 2:1.3.3-1 X11 client-side library
ii libxi6 2:1.3-2 X11 Input extension library
ii xserver-xorg-core 2:1.7.4-2 Xorg X server - core server
xserver-xorg-input-wacom recommends no packages.
Versions of packages xserver-xorg-input-wacom suggests:
ii xinput 1.4.2-1 Runtime configuration and test of
-- no debconf information
diff -u -r xf86-input-wacom-0.10.3+20100109/src/wcmXCommand.c xf86-input-wacom-0.10.3+20100109.my/src/wcmXCommand.c
--- xf86-input-wacom-0.10.3+20100109/src/wcmXCommand.c 2010-01-09 10:40:54.000000000 +0300
+++ xf86-input-wacom-0.10.3+20100109.my/src/wcmXCommand.c 2010-02-22 23:45:54.165461382 +0300
@@ -585,13 +585,26 @@
values = (CARD32*)prop->data;
+ DBG(0, priv, "(PROP_TV_RESOLUTIONS) values=[%d, %d, %d, %d]\n",
+ values[0], values[1], values[2], values[3]);
+
/* non-TwinView settings can not set TwinView RESOLUTION */
if ((priv->twinview == TV_NONE) || (values[0] < 0) ||
- (values[1] < 0) || (values[2] < 0) || (values[3] < 0) ||
- ((values[0] + values[2]) != screenInfo.screens[0]->width) ||
- ((values[1] + values[3]) != screenInfo.screens[0]->height))
+ (values[1] < 0) || (values[2] < 0) || (values[3] < 0))
return BadValue;
+ if ((priv->twinview == TV_LEFT_RIGHT) ||
+ (priv->twinview == TV_RIGHT_LEFT))
+ if (((values[0] + values[2]) != screenInfo.screens[0]->width) ||
+ max(values[1], values[3]) != screenInfo.screens[0]->height)
+ return BadValue;
+
+ if ((priv->twinview == TV_ABOVE_BELOW) ||
+ (priv->twinview == TV_BELOW_ABOVE))
+ if (((values[1] + values[3]) != screenInfo.screens[0]->height) ||
+ max(values[0], values[2]) != screenInfo.screens[0]->width)
+ return BadValue;
+
if (!checkonly)
{
priv->tvResolution[0] = values[0];
diff -u -r xf86-input-wacom-0.10.3+20100109/tools/xsetwacom.c xf86-input-wacom-0.10.3+20100109.my/tools/xsetwacom.c
--- xf86-input-wacom-0.10.3+20100109/tools/xsetwacom.c 2010-01-09 10:40:54.000000000 +0300
+++ xf86-input-wacom-0.10.3+20100109.my/tools/xsetwacom.c 2010-02-23 00:05:46.702573807 +0300
@@ -471,20 +471,13 @@
.prop_offset = 3,
},
{
- .name = "TVResolution0",
- .desc = "Sets MetaModes option for TwinView Screen 0. ",
+ .name = "TVResolutions",
+ .desc = "Sets MetaModes option for TwinView. Format: W0 H0 W1 H1. ",
.prop_name = WACOM_PROP_TWINVIEW_RES,
.prop_format = 32,
.prop_offset = 0,
},
{
- .name = "TVResolution1",
- .desc = "Sets MetaModes option for TwinView Screen 1. ",
- .prop_name = WACOM_PROP_TWINVIEW_RES,
- .prop_format = 32,
- .prop_offset = 1,
- },
- {
.name = "RawFilter",
.desc = "Enables and disables filtering of raw data, "
"default is true/on.",