diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rwxr-xr-x | src/wacomxi/wacomcpl-exec | 276 | ||||
-rwxr-xr-x | src/xdrv/wcmCommon.c | 9 | ||||
-rwxr-xr-x | src/xdrv/wcmConfig.c | 5 | ||||
-rw-r--r-- | src/xdrv/wcmXCommand.c | 18 | ||||
-rwxr-xr-x | src/xdrv/xf86Wacom.c | 47 | ||||
-rwxr-xr-x | src/xdrv/xf86Wacom.h | 20 |
7 files changed, 218 insertions, 162 deletions
@@ -1,3 +1,8 @@ +2007-12-13 Ping Cheng <pingc@wacom.com> + * Updated wacomcpl + * Incorporated Xorg 7.3 workaround from Magnus Vigerlöf + * Label 0.7.9-4 + 2007-11-28 Ping Cheng <pingc@wacom.com> * Clean support of outbound tracking for Bamboo, etc * Updated kernel 2.4.x code diff --git a/src/wacomxi/wacomcpl-exec b/src/wacomxi/wacomcpl-exec index b7c9805..48eef15 100755 --- a/src/wacomxi/wacomcpl-exec +++ b/src/wacomxi/wacomcpl-exec @@ -308,10 +308,10 @@ proc updateScreenList {} { } proc disableButtons {} { - global bName numButton currentW currentb + global bName numButton numStrips currentW currentb if { $currentb } { - for { set i 1 } { $i <= $numButton } { incr i 1 } { + for { set i 1 } { $i <= [ expr ($numButton+$numStrips) ] } { incr i 1 } { .allothers.f.$i configure -state disabled } .allothers.f.ok configure -state disable @@ -338,7 +338,7 @@ proc disableButtons {} { proc getDeviceOptionProc { dev i } { global getOption getOptionDefault Option oldKeys spName numButton - global modeToggleB ignoreButton doubleClickB keystrokeB + global modeToggleB ignoreButton doubleClickB keystrokeB numStrips for { set j 1 } { $j < [ expr $i+1 ] } { incr j 1 } { set value [ exec xsetwacom get $dev $Option($j) ] @@ -369,35 +369,30 @@ proc getDeviceOptionProc { dev i } { } } else { set match 0 - # are they wheel/ring/strips? - for { set k 1 } { $k <= 8 } { incr k 1 } { + # are they button/wheel/ring/strip? + for { set k 1 } { $k <= [ expr ($numButton+$numStrips) ] } { incr k 1 } { if { ![string compare -nocase $Option($j) $spName($k)] } { - set k 9 set match 1 + break } } + set getOption($dev,$Option($j)) $value if { $match } { if { ($value > $doubleClickB) || ($value == 0) } { - set output [ exec xsetwacom get $dev $Option($j) ] - set outputd [ lindex $output 0 ] - if { ![string compare -nocase -length 8 DBLCLICK $outputd ] } { + if { ![string compare -nocase -length 8 DBLCLICK $value ] } { set getOption($dev,$Option($j)) $doubleClickB } - if { ![string compare -nocase -length 4 "Core" $outputd ] } { + if { ![string compare -nocase -length 4 CORE $value ] } { set getOption($dev,$Option($j)) $keystrokeB - set oldKeys($Option($j)) $output + set oldKeys($Option($j)) $value } - if { ![string compare -nocase -length 10 MODETOGGLE $outputd ] } { - set getOption($dev,$Option($j)) $modetoggleB + if { ![string compare -nocase -length 10 MODETOGGLE $value ] } { + set getOption($dev,$Option($j)) $modeToggleB } - if { ($value == 0) } { + if { $value == 0 } { set getOption($dev,$Option($j)) $ignoreButton } - } else { - set getOption($dev,$Option($j)) $value } - } else { - set getOption($dev,$Option($j)) $value } set getOptionDefault($dev,$Option($j)) $value1 } @@ -405,8 +400,8 @@ proc getDeviceOptionProc { dev i } { } proc updateDevice {} { - global device deviceIndex getOption hasPad isLCD - global numScreens getDeviceModel Option + global device deviceIndex hasPad isLCD + global numScreens getDeviceModel set olddev $device set device [ .workingDev.list get anchor ] @@ -426,9 +421,6 @@ proc updateDevice {} { .workingDev.label configure -text $device set model $getDeviceModel($device,model) set type $getDeviceModel($device,type) - set Option(1) "Mode" - getDeviceOptionProc $device 1 - set mode $getOption($device,Mode) destroy .panel if { ![ string compare $type "pad" ] } { if { $hasPad($model) } { @@ -563,13 +555,17 @@ proc displayScreenList { dev } { proc updateButton {} { global device getDeviceModel sm getOption spName isLCD - global dm currentW oldKeys numButton cKeys numStrips + global dm currentW oldKeys numButton cKeys numStrips startS global modeToggleB ignoreButton doubleClickB keystrokeB set type $getDeviceModel($device,type) set model $getDeviceModel($device,model) for { set i 1 } { $i <= [ expr ($numButton + $numStrips)] } { incr i 1 } { + set k $i + if { $i > $numButton } { + set k [ expr ($startS-1+$i) ] + } switch [ $currentW.f.$i cget -text ] { "Left" { set j 1 @@ -594,23 +590,23 @@ proc updateButton {} { set v "ModeToggle 1" } "KeyStroke" { set j $keystrokeB - set v $cKeys($spName($i)) - set oldKeys($spName($i)) $cKeys($spName($i)) } + set v $cKeys($spName($k)) + set oldKeys($spName($k)) $cKeys($spName($k)) } "Ignore" { set j $ignoreButton set v "Button 0" } } - set getOption($device,$spName($i)) $j - updateXinitrc $device $spName($i) $v + set getOption($device,$spName($k)) $j + updateXinitrc $device $spName($k) $v # reset key strokes if { $j != $keystrokeB } { - set $oldKeys($spName($i)) "" - set cKeys($spName($i)) "" + set $oldKeys($spName($k)) "" + set cKeys($spName($k)) "" } } - if { !isLCD($model) && [string compare $type "pad"] } { + if { !$isLCD($model) && [string compare $type "pad"] } { set mode [ $currentW.f.mode cget -text ] updateXinitrc $device mode $mode if { $mode == $dm(1) } { @@ -635,18 +631,24 @@ proc updateButton {} { proc defaultButton {} { global db db1 db2 db3 db4 db5 db6 db7 db8 db9 db10 - global db11 db12 db13 db14 isLCD - global dm sm dmv smv numButton + global db11 db12 db13 db14 isLCD spName + global dm sm dmv smv numButton startS numStrips global device getOptionDefault getDeviceModel for { set i 1 } { $i <= $numButton } { incr i 1 } { - set db$i $db($i) + set db$i $db($getOptionDefault($device,$spName($i))) + } + + if { $startS } { + for { set i $startS } { $i <= [ expr ($startS+$numStrips-1) ] } { incr i 1 } { + set db$i $db($getOptionDefault($device,$spName([ expr ($numButton+$i) ]))) + } } set model $getDeviceModel($device,model) set type $getDeviceModel($device,type) - if { !$isLCD($model) } { + if { !$isLCD($model) && [ string compare $type "pad" ] } { set dmv $dm([ expr $getOptionDefault($device,Mode)+1 ]) } @@ -681,11 +683,13 @@ proc getNumButton { type } { } proc setspName {} { - global numButton spName + global numButton spName numStrips startS device Option cKeys oldKeys + global numPadRelW numPadStrips numPadRings getDeviceModel for { set i 1 } { $i <= $numButton } { incr i 1 } { set spName($i) Button$i } + getDeviceOptionProc $device $numButton set spName([expr ($numButton + 1) ]) "RelWUp" set spName([expr ($numButton + 2) ]) "RelWDn" @@ -695,18 +699,42 @@ proc setspName {} { set spName([expr ($numButton + 6) ]) "StripLDn" set spName([expr ($numButton + 7) ]) "StripRUp" set spName([expr ($numButton + 8) ]) "StripRDn" + + for { set i 1 } { $i <= 8 } { incr i 1 } { + set Option($i) $spName([expr ($numButton + $i)]) + } + getDeviceOptionProc $device 8 + + set s1 5 + set s2 8 + set model $getDeviceModel($device,model) + if { $numPadRelW($model) } { # G4 + set s1 1 + set s2 2 + } elseif { $numPadStrips($model) == 1 } { # I3 4x5 + set s1 5 + set s2 6 + } elseif { $numPadRings($model) } { # Bamboo + set s1 3 + set s2 4 + } + set startS $s1 + set numStrips [expr ($s2 - $s1) + 1] + + # initial keys + for { set i 1 } { $i <= [ expr ($numButton + 8) ] } { incr i 1 } { + set oldKeys($spName($i)) "" + set cKeys($spName($i)) "" + } } proc initialButton {} { - global device Option numButton getDeviceModel spName numStrips + global device Option numButton getDeviceModel + global spName numStrips set type $getDeviceModel($device,type) - # buttons - getNumButton $type set t $numButton - setspName - if { [ string compare $type "pad" ] } { set t [expr ($t+1)] set Option($t) "Mode" @@ -714,7 +742,9 @@ proc initialButton {} { set Option($t) "TPCButton" } getDeviceOptionProc $device $t - displayMode + if { [ string compare $type "pad" ] } { + displayMode + } for { set i 1 } { $i <= $numButton } { incr i 1 } { addMenu $i @@ -757,11 +787,11 @@ proc displayMode {} { } } -proc displaySubWindow { okF deF initial winID cbutton } { - global currentb currentW wName +proc displaySubWindow { okF deF initial winID cbutton kcurrent} { + global currentb currentW wName currentk set currentb $cbutton - + set currentk $kcurrent if { $cbutton } { set currentW .keystrokes } else { @@ -808,13 +838,12 @@ proc closeTabWindow {} { if { $bName(keystroke) } { set bName(keystroke) 0 set currentW .allothers - for { set i 1 } { $i <= $numButton } { incr i 1 } { + for { set i 1 } { $i <= [ expr ($numButton+$numStrips) ] } { incr i 1 } { $currentW.f.$i configure -state normal } $currentW.f.default configure -state normal $currentW.f.ok configure -state normal $currentW.f.cancel configure -state normal - set cKeys($spName($currentb)) "" set currentb 0 } else { if { $bName(pressure) } { @@ -832,7 +861,7 @@ proc closeTabWindow {} { if { $bName(advanced) } { .panel.advanced configure -state normal } - for { set i 1 } { $i <= [expr ($numButton + $numStrips)] } { incr i 1 } { + for { set i 1 } { $i <= [ expr ($numButton+$numStrips) ] } { incr i 1 } { set cKeys($spName($i)) "" } bindtags .workingDev.list $workingTags @@ -841,16 +870,12 @@ proc closeTabWindow {} { proc expressKeys { } { global db db1 db2 db3 db4 db5 db6 db7 db8 db9 db10 - global db11 db12 db13 db14 + global db11 db12 db13 db14 startS global currentW device numButton spName numStrips global Option getOption getDeviceModel cKeys oldKeys global doubleClickB ignoreButton modeToggleB keystrokeB global numPadRings numPadStrips numPadAbsW numPadRelW - for { set i 1 } { $i <= 8 } { incr i 1 } { - set Option($i) $spName([expr ($numButton + $i)]) - } - set name(1) "Wheel Up" set name(2) "Wheel Down" set name(3) "Ring Clockwise" @@ -860,55 +885,38 @@ proc expressKeys { } { set name(7) "Right Strip Up" set name(8) "Right Strip Down" - getDeviceOptionProc $device 8 - - set s1 5 - set s2 8 - set model $getDeviceModel($device,model) - if { $numPadRelW($model) } { # G4 - set s1 1 - set s2 2 - } elseif { $numPadStrips($model) == 1 } { # I3 4x5 - set s1 5 - set s2 6 - } elseif { $numPadRings($model) } { # Bamboo - set s1 3 - set s2 4 - } - set numStrips [expr ($s2 - $s1) + 1] - for { set i $s1 } { $i <= $s2 } { incr i 1 } { - set cur [ expr ($numButton + $i - $s1 + 1) ] + set s2 [expr ($startS + $numStrips) - 1] + for { set i $startS } { $i <= $s2 } { incr i 1 } { + set cur [ expr ($numButton + $i - $startS + 1) ] set opt $getOption($device,$Option($i)) if { $opt == "" } { set opt $ignoreButton } - set cur [ expr ($numButton + $i - $s1 + 1) ] + set curOption [ expr ($numButton + $i) ] set db$cur $db($opt) - #reset keys if { $opt != $keystrokeB } { set cKeys($Option($i)) "" set oldKeys($Option($i)) "" } set bmenu [ tk_optionMenu $currentW.f.$cur db$cur \ - $db(1) $db(2) $db(3) $db(4) $db(5) ] + $db(1) $db(2) $db(3) $db(4) $db(5) $db($ignoreButton) ] $bmenu insert 6 radiobutton -label "$db($keystrokeB)" \ -variable menvar -command "displaySubWindow \ - updateKeys 0 initialKeys 5 $cur" - $bmenu insert 7 radiobutton -label "$db($ignoreButton)" + updateKeys 0 initialKeys 5 $cur $curOption" label $currentW.f.name$cur -text "$name($i): " set t2 [expr ($numButton+1)/2+1] set t1 0 - if { [expr ($s2 - $s1) > 1] } { - if { $i == [expr ($s1+1)] || \ - $i == [expr ($s1+3)] } { + if { [expr ($s2 - $startS) > 1] } { + if { $i == [expr ($startS+1)] || \ + $i == [expr ($startS+3)] } { set t2 [expr ($numButton+1)/2+2] } if { [expr ($i - $s1) > 1] } { set t1 2 } } else { - if { [expr ($i - $s1) > 0] } { + if { [expr ($i - $startS) > 0] } { set t1 2 } } @@ -929,10 +937,9 @@ proc addMenu { curb } { set opt $getOption($device,$spName($curb)) if { $opt == "" } { set opt $curb } if { ![string compare $type "pad"] } { + # values 30 or larger are special functions if { ($opt > 8 && $opt < 14) } { set opt [ expr ($opt-8) ] - } else { - set opt $ignoreButton } } set db$curb $db($opt) @@ -942,24 +949,20 @@ proc addMenu { curb } { set oldKeys($spName($curb)) "" } - - set bmenu [ tk_optionMenu $currentW.f.$curb db$curb $db(1) $db(2) \ - $db(3) $db(4) $db(5) ] - set i 5 if { [string compare $type "pad"] } { - set i [expr ($i+1)] - $bmenu insert $i radiobutton -label "$db($doubleClickB)" - if { $model != 144 } { - set i [expr ($i+1)] - $bmenu insert $i radiobutton -label "$db($modeToggleB)" - } - } + set bmenu [ tk_optionMenu $currentW.f.$curb db$curb $db(1) $db(2) \ + $db(3) $db(4) $db(5) $db($doubleClickB) $db($modeToggleB) $db($ignoreButton) ] + set i 8 + } else { + set bmenu [ tk_optionMenu $currentW.f.$curb db$curb $db(1) $db(2) \ + $db(3) $db(4) $db(5) $db($ignoreButton) ] + set i 6 + } + set i [expr ($i+1)] $bmenu insert $i radiobutton -label "$db($keystrokeB)" \ -variable menvar -command "displaySubWindow \ - updateKeys 0 initialKeys 5 $curb" - set i [expr ($i+1)] - $bmenu insert $i radiobutton -label "$db($ignoreButton)" + updateKeys 0 initialKeys 5 $curb $curb" label $currentW.f.name$curb -text "Button $curb: " set t2 [expr ($curb-1)/2] @@ -1251,18 +1254,17 @@ proc defaultSet {} { proc initialKeys {} { global device getDeviceModel getOption cKeys spName - global Option oldKeys currentW bName currentb + global Option oldKeys currentW bName currentb currentk frame $currentW.f.panelt set bName(keystroke) 1 text $currentW.f.panelt.input -width 40 -height 10 \ -yscrollcommand "$currentW.f.panelt.srl_y set" - - if { $cKeys($spName($currentb)) != "" } { - $currentW.f.panelt.input insert end $cKeys($spName($currentb)) + if { $cKeys($spName($currentk)) != "" } { + $currentW.f.panelt.input insert end $cKeys($spName($currentk)) } else { - if { $oldKeys($spName($currentb)) != "" } { - $currentW.f.panelt.input insert end $oldKeys($spName($currentb)) + if { $oldKeys($spName($currentk)) != "" } { + $currentW.f.panelt.input insert end $oldKeys($spName($currentk)) } } scrollbar $currentW.f.panelt.srl_y -width 10 -command \ @@ -1375,7 +1377,7 @@ proc initialKeys {} { proc updateKeys {} { global device oldKeys currentb cKeys spName currentW global db db1 db2 db3 db4 db5 db6 db7 db8 db9 db10 - global db11 db12 db13 db14 + global db11 db12 db13 db14 currentk global doubleClickB ignoreButton modeToggleB keystrokeB set keys [ $currentW.f.panelt.input get 1.0 end ] @@ -1388,20 +1390,20 @@ proc updateKeys {} { } if { $keys != "" } { - if { $oldKeys($spName($currentb)) != $keys } { + if { $oldKeys($spName($currentk)) != $keys } { if { [string compare -nocase -length 8 $keys "core key"] } { - set cKeys($spName($currentb)) "core key $keys" + set cKeys($spName($currentk)) "core key $keys" } else { - set cKeys($spName($currentb)) $keys + set cKeys($spName($currentk)) $keys } - set getOption($device,$spName($currentb)) $keystrokeB - set db$currentb $db($keystroke) + set getOption($device,$spName($currentk)) $keystrokeB + set db$currentb $db($keystrokeB) } } else { # ignore the button - set getOption($device,$spName($currentb)) $ignoreButton + set getOption($device,$spName($currentk)) $ignoreButton set db$currentb $db($ignoreButton) } - if { [ string length $cKeys($spName($currentb)) ] > 240 } { + if { [ string length $cKeys($spName($currentk)) ] > 240 } { helpWindow "Help Window " \ "\n\nYou have entered more 240 keys. \n\ wacomcpl only accepts 240 keys. \n\ @@ -1412,7 +1414,8 @@ proc updateKeys {} { } proc createPanel { pressure button mapping calibrate } { - global bName device getOption getDeviceModel currentb wName + global bName device getOption getDeviceModel currentb + global wName startS Option frame .panel set bName(pressure) $pressure @@ -1420,9 +1423,14 @@ proc createPanel { pressure button mapping calibrate } { set bName(mapping) $mapping set bName(calibrate) $calibrate set currentb 0 + set type $getDeviceModel($device,type) + + # buttons and expresskeys + getNumButton $type + setspName set SN [ exec xsetwacom get $device ToolSerial ] - if { $SN && [string compare $getDeviceModel($device,type) "pad"] } { + if { $SN && [string compare type "pad"] } { set hexSN [format %X $SN] label .panel.sn -text "Serial Number: $hexSN" grid .panel.sn -row 0 -column 0 -columnspan 2 -padx 3 -pady 3 @@ -1431,25 +1439,25 @@ proc createPanel { pressure button mapping calibrate } { if { $pressure } { button .panel.pressure -text $wName(1) \ -state normal -command "displaySubWindow \ - updateTip defaultTip initialTip 1 0" + updateTip defaultTip initialTip 1 0 0" grid .panel.pressure -row 5 -column 0 -columnspan 2 -sticky news -padx 10 } if { $button } { if { ![string compare $getDeviceModel($device,type) "pad"] } { button .panel.button -text $wName(6) \ -state normal -command "displaySubWindow \ - updateButton defaultButton initialButton 6 0" + updateButton defaultButton initialButton 6 0 $startS" } else { button .panel.button -text $wName(2) \ -state normal -command "displaySubWindow \ - updateButton defaultButton initialButton 2 0" + updateButton defaultButton initialButton 2 0 0" } grid .panel.button -row 6 -column 0 -columnspan 2 -sticky news -padx 10 } if { $mapping } { button .panel.mapping -text $wName(3) \ -state normal -command "displaySubWindow \ - updateT defaultT initialT 3 0" + updateT defaultT initialT 3 0 0" grid .panel.mapping -row 6 -column 3 -columnspan 2 -sticky news -padx 10 } if { $calibrate } { @@ -1458,15 +1466,18 @@ proc createPanel { pressure button mapping calibrate } { grid .panel.calibrate -row 5 -column 3 -columnspan 2 -sticky news -padx 10 } - set mode [ exec xsetwacom get $device mode ] - set getOption($device,Mode) $mode set bName(advanced) 0 - if { ($pressure || $mapping) && $mode } { #not a pad and in absolute mode - set bName(advanced) 1 - button .panel.advanced -text $wName(4) \ - -state normal -command "displaySubWindow \ - updateSet defaultSet initialSet 4 0" - grid .panel.advanced -row 9 -column 2 -columnspan 2 -sticky news -padx 10 + if { [string compare $getDeviceModel($device,type) "pad"] } { #not a pad + set Option(1) "Mode" + getDeviceOptionProc $device 1 + set mode $getOption($device,Mode) + if { ($pressure || $mapping) && $mode } { #and in absolute mode + set bName(advanced) 1 + button .panel.advanced -text $wName(4) \ + -state normal -command "displaySubWindow \ + updateSet defaultSet initialSet 4 0 0" + grid .panel.advanced -row 9 -column 2 -columnspan 2 -sticky news -padx 10 + } } grid .panel -row 0 -column 1 -columnspan 8 -sticky news -padx 10 -pady 40 @@ -1518,10 +1529,13 @@ proc updateModelInfo { } { # I3 set numPadButtons(176) 4 set numPadStrips(176) 1 - for { set i 177 } { $i <= 183 } { incr i 1 } { + for { set i 177 } { $i <= 182 } { incr i 1 } { set numPadButtons($i) 8 set numPadStrips($i) 2 } + set numPadButtons(183) 4 + set numPadStrips(183) 1 + # Hummingbird set numPadButtons(198) 10 set numPadStrips(198) 2 @@ -1551,6 +1565,11 @@ proc createControls { } { set db(3) "Right" set db(4) "Fourth" set db(5) "Fifth" + set db(6) "Ignore" + set db(7) "Ignore" + set db(8) "Ignore" + set db(9) "Ignore" + set db(10) "Ignore" set db($doubleClickB) "Left Double" set db($modeToggleB) "Mode Toggle" set db($ignoreButton) "Ignore" @@ -1572,12 +1591,7 @@ proc createControls { } { # up to the max number of buttons set numButton 10 set numStrips 4 - setspName - - for { set i 1 } { $i <= [ expr ($numButton + 8) ] } { incr i 1 } { - set oldKeys($spName($i)) "" - set cKeys($spName($i)) "" - } +# setspName checkbutton .showHelp -text "Turn Help on" -anchor w \ -variable showHelp -state normal diff --git a/src/xdrv/wcmCommon.c b/src/xdrv/wcmCommon.c index 059a3dc..05a41bf 100755 --- a/src/xdrv/wcmCommon.c +++ b/src/xdrv/wcmCommon.c @@ -518,7 +518,7 @@ static void sendAButton(LocalDevicePtr local, int button, int mask, * Only left double is supported. */ #if defined WCM_XORG && GET_ABI_MAJOR(ABI_XINPUT_VERSION) > 0 - /Match the button sent to the actual pos due to a bug in Xorg + /* Match the button sent to the actual pos due to a bug in Xorg * xserver 1.4. I.e. button1 is button1. */ button_idx = 1; @@ -900,8 +900,11 @@ void xf86WcmSendEvents(LocalDevicePtr local, const WacomDeviceState* ds) #if defined WCM_XORG && GET_ABI_MAJOR(ABI_XINPUT_VERSION) > 0 /* Ugly hack for Xorg 7.3, which doesn't call xf86WcmDevConvert * for coordinate conversion at the moment */ - x = (int)((double)(x - priv->topX) * priv->factorX + 0.5); - y = (int)((double)(y - priv->topY) * priv->factorY + 0.5); + /* The +-0.4 is to increase the sensitivity in relative mode. + * Must be sensitive to which way the tool is moved or one way + * will get a severe penalty for small movements. */ + x = (int)((double)(x - priv->topX) * priv->factorX + (x>=0?0.4:-0.4)); + y = (int)((double)(y - priv->topY) * priv->factorY + (y>=0?0.4:-0.4)); #endif if (type != PAD_ID) diff --git a/src/xdrv/wcmConfig.c b/src/xdrv/wcmConfig.c index a2dbbcb..a40884b 100755 --- a/src/xdrv/wcmConfig.c +++ b/src/xdrv/wcmConfig.c @@ -149,8 +149,9 @@ LocalDevicePtr xf86WcmAllocate(char* name, int flag) priv->nbuttons = MAX_BUTTONS; /* Default number of buttons */ priv->relup = 5; /* Default relative wheel up event */ priv->reldn = 4; /* Default relative wheel down event */ - priv->wheelup = 0; /* Default absolute wheel up event */ - priv->wheeldn = 0; /* Default absolute wheel down event */ + + priv->wheelup = IsPad (priv) ? 5 : 0; /* Default absolute wheel up event */ + priv->wheeldn = IsPad (priv) ? 4 : 0; /* Default absolute wheel down event */ priv->striplup = 4; /* Default left strip up event */ priv->stripldn = 5; /* Default left strip down event */ priv->striprup = 4; /* Default right strip up event */ diff --git a/src/xdrv/wcmXCommand.c b/src/xdrv/wcmXCommand.c index cb8727d..effd6e1 100644 --- a/src/xdrv/wcmXCommand.c +++ b/src/xdrv/wcmXCommand.c @@ -522,14 +522,18 @@ static int xf86WcmSetButtonParam(LocalDevicePtr local, int param, int value) return BadValue; else { - if ((!(value & AC_TYPE)) && (value != priv->button[bn])) + if (((value & AC_TYPE) == AC_BUTTON) && (value != priv->button[bn]) && !number_keys ) { + /* assign button */ snprintf (st, sizeof (st), "Button%d", bn); xf86ReplaceIntOption (local->options, st, value); priv->button[bn] = xf86SetIntOption (local->options, st, bn); + } + else + { + setVal = &(priv->button [bn]); + keyP = priv->keys[bn]; } - setVal = &(priv->button [bn]); - keyP = priv->keys[bn]; } } @@ -568,6 +572,7 @@ static int xf86WcmSetButtonParam(LocalDevicePtr local, int param, int value) keyP = priv->srdnk; break; } + /* assign keys */ if (keyP) { if (!number_keys) @@ -575,8 +580,8 @@ static int xf86WcmSetButtonParam(LocalDevicePtr local, int param, int value) *setVal = value; number_keys = (value & AC_NUM_KEYS) >> 20; DBG(10, priv->debugLevel, ErrorF( - "xf86WcmSetButtonParam value = %x number" - " of keys = %d\n", *setVal, number_keys)); + "xf86WcmSetButtonParam value = %x number" + " of keys = %d\n", *setVal, number_keys)); if (number_keys) keyP[button_keys++] = value & 0xffff; } @@ -586,6 +591,9 @@ static int xf86WcmSetButtonParam(LocalDevicePtr local, int param, int value) { keyP[button_keys++] = value & 0xffff; keyP[button_keys++] = (value & 0xffff0000) >> 16; + DBG(10, priv->debugLevel, ErrorF( + "xf86WcmSetButtonParam got %d values = %x \n", + button_keys, value)); } } if (button_keys >= number_keys) diff --git a/src/xdrv/xf86Wacom.c b/src/xdrv/xf86Wacom.c index 9786a56..c1554af 100755 --- a/src/xdrv/xf86Wacom.c +++ b/src/xdrv/xf86Wacom.c @@ -58,9 +58,10 @@ * 2007-06-25 47-pc0.7.8 - new release * 2007-10-25 47-pc0.7.9-1 - Support multimonitors in both horizonal and vertical settings * 2007-11-21 47-pc0.7.9-3 - Updated TwinView screen switch offset + * 2007-12-07 47-pc0.7.9-4 - Support Cintiq 12WX and Bamboo */ -static const char identification[] = "$Identification: 47-0.7.9-3 $"; +static const char identification[] = "$Identification: 47-0.7.9-4 $"; /****************************************************************************/ @@ -170,21 +171,11 @@ static int xf86WcmInitArea(LocalDevicePtr local) } } - if (priv->numScreen == 1) - { - priv->factorX = totalWidth - / (double)(priv->bottomX - priv->topX - 2*priv->tvoffsetX); - priv->factorY = maxHeight - / (double)(priv->bottomY - priv->topY - 2*priv->tvoffsetY); - DBG(2, priv->debugLevel, ErrorF("X factor = %.3g, Y factor = %.3g\n", - priv->factorX, priv->factorY)); - } - /* Maintain aspect ratio */ if (priv->flags & KEEP_SHAPE_FLAG) { screenRatio = totalWidth / (double)maxHeight; - tabletRatio = ((double)(common->wcmMaxX - priv->topX)) / + tabletRatio = ((double)(common->wcmMaxX - priv->topX)) / (common->wcmMaxY - priv->topY); DBG(2, priv->debugLevel, ErrorF("screenRatio = %.3g, " @@ -205,6 +196,13 @@ static int xf86WcmInitArea(LocalDevicePtr local) } /* end keep shape */ + priv->factorX = totalWidth + / (double)(priv->bottomX - priv->topX - 2*priv->tvoffsetX); + priv->factorY = maxHeight + / (double)(priv->bottomY - priv->topY - 2*priv->tvoffsetY); + DBG(2, priv->debugLevel, ErrorF("X factor = %.3g, Y factor = %.3g\n", + priv->factorX, priv->factorY)); + inlist = priv->tool->arealist; /* The first one in the list is always valid */ @@ -258,6 +256,7 @@ void xf86WcmInitialCoordinates(LocalDevicePtr local, int axes) WacomDevicePtr priv = (WacomDevicePtr)local->private; WacomCommonPtr common = priv->common; int tabletSize = 0, topx = 0, topy = 0; + int resolution; /* x ax */ if ( !axes ) @@ -274,16 +273,18 @@ void xf86WcmInitialCoordinates(LocalDevicePtr local, int axes) if (priv->flags & ABSOLUTE_FLAG) topx = priv->topX; + resolution = common->wcmResolX; #if defined WCM_XORG && GET_ABI_MAJOR(ABI_XINPUT_VERSION) > 0 /* Ugly hack for Xorg 7.3, which doesn't call xf86WcmDevConvert * for coordinate conversion at the moment */ if (priv->flags & ABSOLUTE_FLAG) tabletSize -= topx; topx = 0; tabletSize = (int)((double)tabletSize * priv->factorX + 0.5); + resolution = (int)((double)resolution * priv->factorX + 0.5); #endif InitValuatorAxisStruct(local->dev, 0, topx, tabletSize, - common->wcmResolX, 0, common->wcmResolX); + resolution, 0, resolution); } else /* y ax */ { @@ -299,16 +300,18 @@ void xf86WcmInitialCoordinates(LocalDevicePtr local, int axes) if (priv->flags & ABSOLUTE_FLAG) topy = priv->topY; + resolution = common->wcmResolY; #if defined WCM_XORG && GET_ABI_MAJOR(ABI_XINPUT_VERSION) > 0 /* Ugly hack for Xorg 7.3, which doesn't call xf86WcmDevConvert * for coordinate conversion at the moment */ if (priv->flags & ABSOLUTE_FLAG) tabletSize -= topy; topy = 0; tabletSize = (int)((double)tabletSize * priv->factorY + 0.5); + resolution = (int)((double)resolution * priv->factorY + 0.5); #endif InitValuatorAxisStruct(local->dev, 1, topy, tabletSize, - common->wcmResolY, 0, common->wcmResolY); + resolution, 0, resolution); } } @@ -401,19 +404,25 @@ void xf86WcmInitialScreens(LocalDevicePtr local) priv->screenBottomY[0] = 0; for (i=0; i<screenInfo.numScreens; i++) { -#if !(defined WCM_XFREE86 || GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0) +#ifdef _XSERV_GLOBAL_H_ priv->screenTopX[i] = dixScreenOrigins[i].x; priv->screenTopY[i] = dixScreenOrigins[i].y; priv->screenBottomX[i] = dixScreenOrigins[i].x; priv->screenBottomY[i] = dixScreenOrigins[i].y; + + DBG(10, priv->debugLevel, ErrorF("xf86WcmInitialScreens from dix for \"%s\" " + "ScreenOrigins[%d].x=%d ScreenOrigins[%d].y=%d \n", + local->name, i, priv->screenTopX[i], i, priv->screenTopY[i])); +#else + if (i > 0) + { + priv->screenTopX[i] = priv->screenBottomX[i-1]; + priv->screenTopY[i] = priv->screenBottomY[i-1]; + } #endif priv->screenBottomX[i] += screenInfo.screens[i]->width; priv->screenBottomY[i] += screenInfo.screens[i]->height; -#if defined WCM_XFREE86 || GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0 - priv->screenTopX[i] = priv->screenBottomX[i]; - priv->screenTopY[i] = priv->screenBottomY[i]; -#endif DBG(10, priv->debugLevel, ErrorF("xf86WcmInitialScreens for \"%s\" " "topX[%d]=%d topY[%d]=%d bottomX[%d]=%d bottomY[%d]=%d \n", local->name, i, priv->screenTopX[i], i, priv->screenTopY[i], diff --git a/src/xdrv/xf86Wacom.h b/src/xdrv/xf86Wacom.h index 8ab8128..805cf60 100755 --- a/src/xdrv/xf86Wacom.h +++ b/src/xdrv/xf86Wacom.h @@ -61,8 +61,24 @@ #include <xf86.h> #define NEED_XF86_TYPES #if !defined(DGUX) -#include <xisb.h> -#include <xf86_ansic.h> +# include <xisb.h> +/* X.org recently kicked out the libc-wrapper */ +# if defined WCM_XORG +# undef NEED_XF86_TYPES /* defined (or not) in xorg-server.h*/ +# include <xorg-server.h> +/* Xorg 6.x, 7.0, 7.1, and 7.2 uses version 6.xx or 7.xx, + * Xorg 7.3 have dropped down to 1.4... */ +# if XORG_VERSION_CURRENT < ((1) * 10000000) + ((4) * 100000) + ((99) * 1000) +# include <xf86_ansic.h> +# elif XORG_VERSION_CURRENT >= ((6) * 10000000) +# include <xf86_ansic.h> +# else +# include <string.h> +# include <errno.h> +# endif +# else +# include <xf86_ansic.h> +# endif #endif #include <xf86_OSproc.h> #include <xf86Xinput.h> |