summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpingc <pingc>2009-07-30 21:39:34 +0000
committerpingc <pingc>2009-07-30 21:39:34 +0000
commit6091ec388e9159c1390650e26091da3b1b2473bd (patch)
tree40abf11bf8a9cadc37d46d3ba6de181c5dbfb2c1
parentd26f9dd44c53f3b27d6f3a9f3a20653d47fa1972 (diff)
downloadxf86-input-wacom-release-0.8.4.tar.gz
Support non-TwinView Nvidia dual setuprelease-0.8.4
-rw-r--r--ChangeLog8
-rwxr-xr-xsrc/2.6.28/wacom_wac.c2
-rwxr-xr-xsrc/include/Xwacom.h11
-rwxr-xr-xsrc/util/xsetwacom.c7
-rw-r--r--src/wacom.4x13
-rwxr-xr-xsrc/wacomxi/wacomcpl-exec144
-rwxr-xr-xsrc/xdrv/wcmCommon.c10
-rwxr-xr-xsrc/xdrv/wcmConfig.c4
-rwxr-xr-xsrc/xdrv/wcmUSB.c12
-rw-r--r--src/xdrv/wcmXCommand.c4
-rwxr-xr-xsrc/xdrv/xf86Wacom.c23
11 files changed, 156 insertions, 82 deletions
diff --git a/ChangeLog b/ChangeLog
index e7fa486..2cb1662 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,12 @@
+2009-07-30 Ping Cheng <pingc@wacom.com>
+ * Support Nvidia non-TwinView setting
+ * Updated webpages and man page
+ * Fixed bug 2789354 for Graphire
+ * Label 0.8.4
+
2009-06-28 Ping Cheng <pingc@wacom.com>
* Added support for DFT720a
- * Fixed DFT720 and DTF521 product ID swap issue in wacom_wac.c
+ * Fixed DFT720 and DTF521 product ID swapped issue in wacom_wac.c
* Added ABS_Z out-prox event for the newer kernels
* Support kernel 2.6.31
* Label 0.8.3-6
diff --git a/src/2.6.28/wacom_wac.c b/src/2.6.28/wacom_wac.c
index 6e12ff5..53b0e56 100755
--- a/src/2.6.28/wacom_wac.c
+++ b/src/2.6.28/wacom_wac.c
@@ -156,7 +156,7 @@ static int wacom_graphire_irq(struct wacom_wac *wacom, void *wcombo)
unsigned char *data = wacom->data;
int x, y, rw;
- if ((data[0] != 2) || (data[0] != 0x03)) {
+ if ((data[0] != 2) && (data[0] != 0x03)) { /* 0x03 for GB data */
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
return 0;
}
diff --git a/src/include/Xwacom.h b/src/include/Xwacom.h
index 88473b4..f698225 100755
--- a/src/include/Xwacom.h
+++ b/src/include/Xwacom.h
@@ -138,11 +138,12 @@
#define XWACOM_PARAM_TOOLSERIAL 384
#define TV_NONE 0
-#define TV_ABOVE_BELOW 1
-#define TV_LEFT_RIGHT 2
-#define TV_BELOW_ABOVE 3
-#define TV_RIGHT_LEFT 4
-#define TV_MAX 4
+#define TV_XINERAMA 1
+#define TV_ABOVE_BELOW 2
+#define TV_LEFT_RIGHT 3
+#define TV_BELOW_ABOVE 4
+#define TV_RIGHT_LEFT 5
+#define TV_MAX 5
#define ROTATE_NONE 0
#define ROTATE_CW 1
diff --git a/src/util/xsetwacom.c b/src/util/xsetwacom.c
index e414fb1..4fcecb2 100755
--- a/src/util/xsetwacom.c
+++ b/src/util/xsetwacom.c
@@ -36,6 +36,7 @@
** 2008-08-27 0.1.7 - PC - Added get XORGVER to xsetwacom
** 2009-02-27 0.1.8 - PC - Added LeftOf and AboveOf to TwinView
** 2009-05-18 0.1.9 - PC - Support get/set serial command
+** 2009-07-14 0.2.0 - PC - Support Nvidia Xinerama setting
**
****************************************************************************/
@@ -105,6 +106,7 @@ struct _PARAMINFO
static const char* tv_char[] =
{
"none",
+ "xinerama"
"vertical",
"horizontal",
"aboveof"
@@ -333,8 +335,9 @@ static PARAMINFO gParamInfo[] =
0, 100, PACKED_CURVE, 0x00006464},
{ "TwinView",
- "Sets the mapping to TwinView horizontal/vertical/leftof/aboveof/none. \n"
- "\t\t Values = none, vertical, horizontal, leftof, aboveof (default is none).",
+ "Sets the mapping to TwinView xinerama/horizontal/vertical/leftof/aboveof/none. \n"
+ "\t\t Values = none, vertical, horizontal, leftof, aboveof, xinerama "
+ "(default is none).",
XWACOM_PARAM_TWINVIEW, VALUE_OPTIONAL, RANGE,
TV_NONE, TV_MAX, SINGLE_VALUE, TV_NONE },
diff --git a/src/wacom.4x b/src/wacom.4x
index 1ed9885..d4adb6c 100644
--- a/src/wacom.4x
+++ b/src/wacom.4x
@@ -144,16 +144,18 @@ A Rspeed greater than 1.0 will speed up the cursor's relative movement. A Rspee
less than 1.0 but greater than 0 will slow down the cursor's relative movement.
A Rspeed too close to 0 is not recommanded.
.TP 4
-.B Option \fI"Twinview"\fP \fI"horizontal"|"vertical"|"leftof"|"aboveof"|"none"\fP
+.B Option \fI"Twinview"\fP \fI"horizontal"|"vertical"|"leftof"|"aboveof"|"xinerama"|"none"\fP
sets the orientation of TwinView to map the tablet to one screen and to be able
to move the screen cursor from one screen to the other when tool reaches the
edge of the tablet. The cursor can be constrained in a specific screen if
"ScreenNo" option is added. If you want to map the tablet to the whole desktop,
-you should NOT add this option. The default is "none".
+you should NOT add this option. The default is "none". Note: due to historic
+reason, "horizontal" represents the "RightOf" and "vertical" represents the
+"BelowOf" in acutal TwinView setup.
.TP 4
-.B Option \fI"TVResolution"\fP \fI"res1,res2"\fP
+.B Option \fI"TVResolution"\fP \fI"res0,res1"\fP
specifies different resolutions for the two screens in TwinView setup. For example,
-if the resolution of screen 1 (res1) is 1024x768 and screen 2 (res2) is 1280x1024,
+if the resolution of screen 0 (res0) is 1024x768 and screen 1 (res1) is 1280x1024,
the option will be set to:
Option "TVResolution" "1024x768,1280x1024"
@@ -164,7 +166,8 @@ this option if your screens are displaying in the same resolutions.
In a multi-monitor environment, specifies the screen number in which the cursor can move.
.TP 4
.B Option \fI"MMonitor"\fP \fI"n"\fP
-turns on/off across monitor movement on a non-TwinView multi-monitor desktop. The default is "on".
+turns on/off across monitor movement on a non-TwinView multi-monitor desktop.
+The default is "on". Here n starts from 0, which indicates the first screen.
.TP 4
.B Option \fI"Rotate"\fP \fI"CW"|"CCW"|"HALF"|"NONE"\fP
rotates the tablet orientation counterclockwise (CCW) or clockwise (CW) or 180 degrees (HALF).
diff --git a/src/wacomxi/wacomcpl-exec b/src/wacomxi/wacomcpl-exec
index 439320b..7dc4860 100755
--- a/src/wacomxi/wacomcpl-exec
+++ b/src/wacomxi/wacomcpl-exec
@@ -132,19 +132,63 @@ proc updateXinitrc {device option value} {
}
}
+proc verifycalibResults { } {
+ global calibResults device getOptionDefault
+
+ set tol_offset [expr ($getOptionDefault($device,BottomY) / 20)]
+ set tol_left [expr (($getOptionDefault($device,BottomY) / 2) - $tol_offset)]
+ set tol_right [expr (($getOptionDefault($device,BottomY) / 2) + $tol_offset)]
+ set tol_bottom [expr ($getOptionDefault($device,BottomY) - $tol_offset)]
+
+ # set tablet Y values to normal when offset is by whole of the tablet size.
+ # Whole has to be first and we do it two times to make sure.
+ if { $calibResults(yDev,0) > $tol_bottom } {
+ set calibResults(yDev,0) [expr ($calibResults(yDev,0) - $getOptionDefault($device,BottomY))]
+ set calibResults(yDev,1) [expr ($calibResults(yDev,1) - $getOptionDefault($device,BottomY))]
+ } elseif { $calibResults(yDev,0) > $tol_bottom } {
+ set calibResults(yDev,0) [expr ($calibResults(yDev,0) - $getOptionDefault($device,BottomY))]
+ set calibResults(yDev,1) [expr ($calibResults(yDev,1) - $getOptionDefault($device,BottomY))]
+ } elseif { ($calibResults(yDev,0) > $tol_left) && ($calibResults(yDev,0) < $tol_right) } {
+ # set tablet Y values to normal when offset is by half tablet size
+ set calibResults(yDev,0) [expr ($calibResults(yDev,0) - ($getOptionDefault($device,BottomY) / 2))]
+ set calibResults(yDev,1) [expr ($calibResults(yDev,1) - ($getOptionDefault($device,BottomY) / 2))]
+ }
+
+ set tol_offset [expr ($getOptionDefault($device,BottomX) / 20)]
+ set tol_left [expr (($getOptionDefault($device,BottomX) / 2) - $tol_offset)]
+ set tol_right [expr (($getOptionDefault($device,BottomX) / 2) + $tol_offset)]
+ set tol_bottom [expr ($getOptionDefault($device,BottomX) - $tol_offset)]
+
+ # set tablet X values to normal when offset is by whole of the tablet size.
+ # Whole has to be first and we do it two times to make sure.
+ if { $calibResults(xDev,0) > $tol_bottom } {
+ set calibResults(xDev,0) [expr ($calibResults(xDev,0) - $getOptionDefault($device,BottomX))]
+ set calibResults(xDev,1) [expr ($calibResults(xDev,1) - $getOptionDefault($device,BottomX))]
+ } elseif { $calibResults(xDev,0) > $tol_bottom } {
+ set calibResults(xDev,0) [expr ($calibResults(xDev,0) - $getOptionDefault($device,BottomX))]
+ set calibResults(xDev,1) [expr ($calibResults(xDev,1) - $getOptionDefault($device,BottomX))]
+ } elseif { ($calibResults(xDev,0) > $tol_left) && ($calibResults(xDev,0) < $tol_right) } {
+ # set tablet X values to normal when offset is by half tablet size
+ set calibResults(xDev,0) [expr ($calibResults(xDev,0) - ($getOptionDefault($device,BottomX) / 2))]
+ set calibResults(xDev,1) [expr ($calibResults(xDev,1) - ($getOptionDefault($device,BottomX) / 2))]
+ }
+}
+
proc calibrationSequence {which xDev yDev} {
global device calibResults screenY_org screenX_org
global workingTags screenTags size numScreens
global swapThresh screenWidth screenHeight getOptionDefault
global getDeviceModel screenXBottom screenYBottom
+ global calibX_org calibY_org calibX_botm calibY_botm
set scaling [exec xsetwacom get $device xscaling]
if { $scaling == 1 } {
- set xNewDev [expr (($xDev - $screenX_org) * $getOptionDefault($device,BottomX))]
- set xDev [expr ($xNewDev / ($screenXBottom - $screenX_org))]
- set yNewDev [expr (($yDev - $screenY_org) * $getOptionDefault($device,BottomY))]
- set yDev [expr ($yNewDev / ($screenYBottom - $screenY_org))]
+ set xNewDev [expr (($xDev - $calibX_org) * $getOptionDefault($device,BottomX))]
+ set xDev [expr ($xNewDev / ($calibX_botm - $calibX_org))]
+ set yNewDev [expr (($yDev - $calibY_org) * $getOptionDefault($device,BottomY))]
+ set yDev [expr ($yNewDev / ($calibY_botm - $calibY_org))]
}
+
set calibResults(xDev,$which) $xDev
set calibResults(yDev,$which) $yDev
@@ -159,23 +203,7 @@ proc calibrationSequence {which xDev yDev} {
wacomxi::bindevent .bottomright.m $device <ButtonRelease> ""
set borderOffset [expr ($size / 2 )]
- # set tablet values to normal
- if { $calibResults(xDev,0) > [expr ($getOptionDefault($device,BottomX) / 2)] } {
- set calibResults(xDev,0) [expr ($calibResults(xDev,0) - $getOptionDefault($device,BottomX))]
- set calibResults(xDev,1) [expr ($calibResults(xDev,1) - $getOptionDefault($device,BottomX))]
- }
- if { $calibResults(yDev,0) > [expr ($getOptionDefault($device,BottomY) / 2)] } {
- set calibResults(yDev,0) [expr ($calibResults(yDev,0) - $getOptionDefault($device,BottomY))]
- set calibResults(yDev,1) [expr ($calibResults(yDev,1) - $getOptionDefault($device,BottomY))]
- }
-
- set widthDev [expr $calibResults(xDev,1) - $calibResults(xDev,0)]
- set heightDev [expr $calibResults(yDev,1) - $calibResults(yDev,0)]
- set widthX [expr $screenWidth-$size]
- set heightX [expr $screenHeight-$size]
-
- #
- # A rough verification of the click
+ # A direction verification of the click
set clickCheck 0
set xDevMin $calibResults(xDev,0)
set xDevMax $calibResults(xDev,1)
@@ -198,6 +226,15 @@ proc calibrationSequence {which xDev yDev} {
If you are pretty sure that you have clicked on the center\n\
of the pink crosshair, you are fine. Otherwise, try it again."
}
+
+ # A starting point verification of the click.
+ verifycalibResults
+
+ set widthDev [expr $calibResults(xDev,1) - $calibResults(xDev,0)]
+ set heightDev [expr $calibResults(yDev,1) - $calibResults(yDev,0)]
+ set widthX [expr $screenWidth-$size]
+ set heightX [expr $screenHeight-$size]
+
set xDevMin [expr $xDevMin - ($borderOffset * $widthDev / $widthX)]
set xDevMax [expr $xDevMax + ($borderOffset * $widthDev / $widthX)]
set yDevMin [expr $yDevMin - ($borderOffset * $heightDev / $heightX)]
@@ -230,16 +267,23 @@ proc calibrationSequence {which xDev yDev} {
}
proc Calibration {} {
- global numScreens device screenTags getOption Option
+ global numScreens device screenTags getOption Option
+ global calibX_org calibY_org calibX_botm calibY_botm tvID
+ global screenX_org screenY_org screenXBottom screenYBottom
+ global screenWidth screenHeight
+ # mainly to get the defaults
set Option(1) "TopX"
set Option(2) "TopY"
set Option(3) "BottomX"
set Option(4) "BottomY"
set Option(5) "Mode"
+ set Option(6) "TwinView"
- getDeviceOptionProc $device 5
+ getDeviceOptionProc $device 6
set mode $getOption($device,Mode)
+ set tvID $getOption($device,TwinView)
+
if { $mode != 1 } {
disableButtons
messageWindow "Warning " "\n\nDevice $device is in relative mode. \n\
@@ -249,6 +293,18 @@ proc Calibration {} {
return
}
+ if { $tvID == 1 } { # Nvidia Xinerama setup starts at (0,0) even when it is not in xorg.conf
+ set calibX_org 0
+ set calibY_org 0
+ set calibX_botm $screenWidth
+ set calibY_botm $screenHeight
+ } else {
+ set calibX_org $screenX_org
+ set calibY_org $screenY_org
+ set calibX_botm $screenXBottom
+ set calibY_botm $screenYBottom
+ }
+
bindtags .workingDev.list .
if { $numScreens($device) > 1 } {
displayScreenList $device
@@ -263,17 +319,16 @@ proc Calibration {} {
}
proc startCalibration {} {
- global device calibResults
- global screenX_org screenY_org size numScreens
- global screenWidth screenHeight screenXBottom screenYBottom
+ global device size numScreens
+ global calibResults calibX_org calibY_org calibX_botm calibY_botm
if { $numScreens($device) > 1 } {
bindtags .screen.list.list .
}
- set y_coor [ expr $screenYBottom-$size*(abs($screenYBottom)/$screenYBottom) ]
- set x_coor [ expr $screenXBottom-$size*(abs($screenXBottom)/$screenXBottom) ]
- pad .topleft +$screenX_org+$screenY_org
+ set y_coor [ expr $calibY_botm-$size*(abs($calibY_botm)/$calibY_botm) ]
+ set x_coor [ expr $calibX_botm-$size*(abs($calibX_botm)/$calibX_botm) ]
+ pad .topleft +$calibX_org+$calibY_org
pad .bottomright +$x_coor+$y_coor
update
#
@@ -1226,7 +1281,7 @@ proc defaultTip {} {
proc initialSet {} {
global device getDeviceModel getOption Option
- global tvd snd currentW
+ global tvd tvID snd currentW
# used by both TwinView and non TwinView multimonitor setup
label $currentW.f.sns -text "Display Mapping: "
@@ -1271,25 +1326,26 @@ proc initialSet {} {
label $currentW.f.tv -text "TwinView Setup: "
set tv(0) "None"
- set tv(1) "Vertical"
- set tv(2) "Horizontal"
- set tv(3) "AboveOf"
- set tv(4) "LeftOf"
+ set tv(1) "Xinerama"
+ set tv(2) "Vertical"
+ set tv(3) "Horizontal"
+ set tv(4) "AboveOf"
+ set tv(5) "LeftOf"
- for { set i 0 } { $i < 5 } { incr i 1 } {
+ for { set i 0 } { $i < 6 } { incr i 1 } {
if { $tvID == $i } {
set tvd $tv($i)
}
}
- tk_optionMenu $currentW.f.tvmenu tvd $tv(0) $tv(1) $tv(2) $tv(3) $tv(4)
+ tk_optionMenu $currentW.f.tvmenu tvd $tv(0) $tv(1) $tv(2) $tv(3) $tv(4) tv(5)
grid $currentW.f.tv -row 2 -column 0
grid $currentW.f.tvmenu -row 2 -column 1
$currentW.f.tvmenu configure -state normal
if { $numS == 1 } {
label $currentW.f.message1 -text "Please click on \"Cancel\" "
- label $currentW.f.message2 -text "if your X server isn't in TwinView setup."
+ label $currentW.f.message2 -text "if your Video card isn't from Nvidia."
grid $currentW.f.message1 -row 0 -column 0
grid $currentW.f.message2 -row 0 -column 1
} elseif { !$tvID } {
@@ -1298,7 +1354,7 @@ proc initialSet {} {
}
proc updateSet {} {
- global device currentW tvd snd
+ global device currentW tvd snd tvID
set numS [ exec xsetwacom get $device NumScreen ]
@@ -1321,20 +1377,22 @@ proc updateSet {} {
if { ![ string compare $tv "None" ] } {
set tv 0
}
+ if { ![ string compare $tv "Xinerama" ] } {
+ set tv 1
+ }
if { ![ string compare $tv "Horizontal" ] } {
- set tv 2
+ set tv 3
}
if { ![ string compare $tv "Vertical" ] } {
- set tv 1
+ set tv 2
}
if { ![ string compare $tv "LeftOf" ] } {
- set tv 4
+ set tv 5
}
if { ![ string compare $tv "AboveOf" ] } {
- set tv 3
+ set tv 4
}
- set tvID [ exec xsetwacom get $device TwinView ]
if { $tv != $tvID } {
updateXinitrc $device TwinView $tv
set getOption($device,TwinView) $tv
diff --git a/src/xdrv/wcmCommon.c b/src/xdrv/wcmCommon.c
index 244714f..a628a05 100755
--- a/src/xdrv/wcmCommon.c
+++ b/src/xdrv/wcmCommon.c
@@ -141,7 +141,7 @@ static void xf86WcmSetScreen(LocalDevicePtr local, int v0, int v1)
if (!(local->flags & (XI86_ALWAYS_CORE | XI86_CORE_POINTER))) return;
- if (priv->twinview != TV_NONE && priv->screen_no == -1 && (priv->flags & ABSOLUTE_FLAG))
+ if (priv->twinview > TV_XINERAMA && priv->screen_no == -1 && (priv->flags & ABSOLUTE_FLAG))
{
if (priv->twinview == TV_LEFT_RIGHT)
{
@@ -938,7 +938,7 @@ void xf86WcmSendEvents(LocalDevicePtr local, const WacomDeviceState* ds)
if(is_absolute) {
x -= priv->topX;
y -= priv->topY;
- if (priv->currentScreen == 1 && priv->twinview != TV_NONE)
+ if (priv->currentScreen == 1 && priv->twinview > TV_XINERAMA)
{
x -= priv->tvoffsetX;
y -= priv->tvoffsetY;
@@ -947,7 +947,7 @@ void xf86WcmSendEvents(LocalDevicePtr local, const WacomDeviceState* ds)
x = (int)((double)x * priv->factorX + (x>=0?0.4:-0.4));
y = (int)((double)y * priv->factorY + (y>=0?0.4:-0.4));
- if ((priv->flags & ABSOLUTE_FLAG) && (priv->twinview == TV_NONE))
+ if ((priv->flags & ABSOLUTE_FLAG) && (priv->twinview <= TV_XINERAMA))
{
x -= priv->screenTopX[priv->currentScreen];
y -= priv->screenTopY[priv->currentScreen];
@@ -1831,7 +1831,7 @@ static void xf86WcmInitialTVScreens(LocalDevicePtr local)
{
WacomDevicePtr priv = (WacomDevicePtr)local->private;
- if (priv->twinview == TV_NONE)
+ if (priv->twinview <= TV_XINERAMA)
return;
priv->numScreen = 2;
@@ -1941,7 +1941,7 @@ void xf86WcmInitialScreens(LocalDevicePtr local)
"number of screen=%d \n", local->name, screenInfo.numScreens));
priv->tvoffsetX = 0;
priv->tvoffsetY = 0;
- if (priv->twinview != TV_NONE)
+ if (priv->twinview > TV_XINERAMA)
{
xf86WcmInitialTVScreens(local);
return;
diff --git a/src/xdrv/wcmConfig.c b/src/xdrv/wcmConfig.c
index 2db7332..5986e71 100755
--- a/src/xdrv/wcmConfig.c
+++ b/src/xdrv/wcmConfig.c
@@ -925,10 +925,12 @@ static LocalDevicePtr xf86WcmInit(InputDriverPtr drv, IDevPtr dev, int flags)
priv->twinview = TV_RIGHT_LEFT;
else if (s && xf86NameCmp(s, "aboveof") == 0)
priv->twinview = TV_BELOW_ABOVE;
+ else if (s && xf86NameCmp(s, "xinerama") == 0)
+ priv->twinview = TV_XINERAMA;
else if (s)
{
xf86Msg(X_ERROR, "%s: invalid Twinview (should be none, vertical (belowof), "
- "horizontal (rightof), aboveof, or leftof). Using none.\n",
+ "horizontal (rightof), aboveof, leftof, xinerama). Using none.\n",
dev->identifier);
priv->twinview = TV_NONE;
}
diff --git a/src/xdrv/wcmUSB.c b/src/xdrv/wcmUSB.c
index e315f01..ba17546 100755
--- a/src/xdrv/wcmUSB.c
+++ b/src/xdrv/wcmUSB.c
@@ -246,7 +246,7 @@ static void usbParseChannel(LocalDevicePtr local, int channel, int serial);
usbDetectConfig, /* detect hardware buttons etc */
};
- static WacomModel usbIntuos =
+ static WacomModel usbIntuos1 =
{
"USB Intuos1",
usbInitProtocol5,
@@ -450,11 +450,11 @@ static struct
{ 0x19, 2032, 2032, &usbBamboo1 }, /* Bamboo1 Medium*/
{ 0x81, 2032, 2032, &usbGraphire4 }, /* Graphire4 6x8 BlueTooth */
- { 0x20, 2540, 2540, &usbIntuos }, /* Intuos 4x5 */
- { 0x21, 2540, 2540, &usbIntuos }, /* Intuos 6x8 */
- { 0x22, 2540, 2540, &usbIntuos }, /* Intuos 9x12 */
- { 0x23, 2540, 2540, &usbIntuos }, /* Intuos 12x12 */
- { 0x24, 2540, 2540, &usbIntuos }, /* Intuos 12x18 */
+ { 0x20, 2540, 2540, &usbIntuos1 }, /* Intuos 4x5 */
+ { 0x21, 2540, 2540, &usbIntuos1 }, /* Intuos 6x8 */
+ { 0x22, 2540, 2540, &usbIntuos1 }, /* Intuos 9x12 */
+ { 0x23, 2540, 2540, &usbIntuos1 }, /* Intuos 12x12 */
+ { 0x24, 2540, 2540, &usbIntuos1 }, /* Intuos 12x18 */
{ 0x03, 508, 508, &usbCintiqPartner }, /* PTU600 */
diff --git a/src/xdrv/wcmXCommand.c b/src/xdrv/wcmXCommand.c
index 721fcc4..5cf0c5c 100644
--- a/src/xdrv/wcmXCommand.c
+++ b/src/xdrv/wcmXCommand.c
@@ -436,7 +436,7 @@ static int xf86WcmSetParam(LocalDevicePtr local, int param, int value)
case XWACOM_PARAM_TVRESOLUTION0:
case XWACOM_PARAM_TVRESOLUTION1:
{
- if (priv->twinview == TV_NONE)
+ if (priv->twinview <= TV_XINERAMA)
return -1;
else
{
@@ -842,7 +842,7 @@ static int xf86WcmGetParam(LocalDevicePtr local, int param)
case XWACOM_PARAM_TVRESOLUTION0:
case XWACOM_PARAM_TVRESOLUTION1:
{
- if (priv->twinview == TV_NONE)
+ if (priv->twinview <= TV_XINERAMA)
return -1;
else
{
diff --git a/src/xdrv/xf86Wacom.c b/src/xdrv/xf86Wacom.c
index 969cbaa..70f4740 100755
--- a/src/xdrv/xf86Wacom.c
+++ b/src/xdrv/xf86Wacom.c
@@ -80,9 +80,10 @@
* 2009-05-08 47-pc0.8.3-4 - Fixed a pad button issue
* 2009-05-22 47-pc0.8.3-5 - Support Nvidia Xinerama
* 2009-06-26 47-pc0.8.3-6 - Support DTF720a
+ * 2009-07-14 47-pc0.8.3-7 - Support Nvidia Xinerama setting
*/
-static const char identification[] = "$Identification: 47-0.8.3-6 $";
+static const char identification[] = "$Identification: 47-0.8.3-7 $";
/****************************************************************************/
@@ -200,13 +201,13 @@ static int xf86WcmInitArea(LocalDevicePtr local)
area->bottomY = priv->bottomY = priv->wcmMaxY;
}
- if (priv->twinview != TV_NONE)
+ if (priv->twinview > TV_XINERAMA)
priv->numScreen = 2;
if (priv->screen_no != -1 &&
(priv->screen_no >= priv->numScreen || priv->screen_no < 0))
{
- if (priv->twinview == TV_NONE || priv->screen_no != 1)
+ if (priv->twinview <= TV_XINERAMA)
{
ErrorF("%s: invalid screen number %d, resetting to default (-1) \n",
local->name, priv->screen_no);
@@ -305,7 +306,7 @@ void xf86WcmVirtaulTabletPadding(LocalDevicePtr local)
if (!(priv->flags & ABSOLUTE_FLAG)) return;
- if ((priv->screen_no != -1) || (priv->twinview != TV_NONE) || (!priv->wcmMMonitor))
+ if ((priv->screen_no != -1) || (priv->twinview > TV_XINERAMA) || (!priv->wcmMMonitor))
{
i = priv->currentScreen;
@@ -342,7 +343,7 @@ void xf86WcmVirtaulTabletSize(LocalDevicePtr local)
priv->sizeX = priv->bottomX - priv->topX - priv->tvoffsetX;
priv->sizeY = priv->bottomY - priv->topY - priv->tvoffsetY;
- if ((priv->screen_no != -1) || (priv->twinview != TV_NONE) || (!priv->wcmMMonitor))
+ if ((priv->screen_no != -1) || (priv->twinview > TV_XINERAMA) || (!priv->wcmMMonitor))
{
i = priv->currentScreen;
@@ -382,9 +383,9 @@ void xf86WcmInitialCoordinates(LocalDevicePtr local, int axes)
{
topx = priv->topX;
bottomx = priv->sizeX + priv->topX;
- if (priv->currentScreen == 1 && priv->twinview != TV_NONE)
+ if ((priv->currentScreen == 1) && (priv->twinview > TV_XINERAMA))
topx += priv->tvoffsetX;
- if (priv->currentScreen == 0 && priv->twinview != TV_NONE)
+ if ((priv->currentScreen == 0) && (priv->twinview > TV_XINERAMA))
bottomx -= priv->tvoffsetX;
}
@@ -406,9 +407,9 @@ void xf86WcmInitialCoordinates(LocalDevicePtr local, int axes)
{
topy = priv->topY;
bottomy = priv->sizeY + priv->topY;
- if (priv->currentScreen == 1 && priv->twinview != TV_NONE)
+ if ((priv->currentScreen == 1) && (priv->twinview > TV_XINERAMA))
topy += priv->tvoffsetY;
- if (priv->currentScreen == 0 && priv->twinview != TV_NONE)
+ if ((priv->currentScreen == 0) && (priv->twinview > TV_XINERAMA))
bottomy -= priv->tvoffsetY;
}
@@ -1203,7 +1204,7 @@ static Bool xf86WcmDevConvert(LocalDevicePtr local, int first, int num,
{
v0 -= priv->topX;
v1 -= priv->topY;
- if (priv->currentScreen == 1 && priv->twinview != TV_NONE)
+ if ((priv->currentScreen == 1) && (priv->twinview > TV_XINERAMA))
{
v0 -= priv->tvoffsetX;
v1 -= priv->tvoffsetY;
@@ -1213,7 +1214,7 @@ static Bool xf86WcmDevConvert(LocalDevicePtr local, int first, int num,
*x = (double)v0 * priv->factorX + 0.5;
*y = (double)v1 * priv->factorY + 0.5;
- if ((priv->flags & ABSOLUTE_FLAG) && (priv->twinview == TV_NONE))
+ if ((priv->flags & ABSOLUTE_FLAG) && (priv->twinview <= TV_XINERAMA))
{
*x -= priv->screenTopX[priv->currentScreen];
*y -= priv->screenTopY[priv->currentScreen];