The current matching algorithm only works if a device name doesn't include spaces. Any hotplugged device however does (names like "Wacom Intuos 4 6x9") and wacomcpl breaks.
Update the matching to search for the end of the line, the last entry then is type name. Wherever xsetwacom is used, enclose the device name in quotation marks. Signed-off-by: Peter Hutterer <[email protected]> --- Seems to work here but since so many other options are broken I can't tell for sure. Please test before applying. (This is a patch for linuxwacom, not xf86-input-wacom.) src/wacomxi/wacomcpl-exec | 72 ++++++++++++++++++++++++-------------------- 1 files changed, 39 insertions(+), 33 deletions(-) diff --git a/src/wacomxi/wacomcpl-exec b/src/wacomxi/wacomcpl-exec index eb6f201..65d20a8 100755 --- a/src/wacomxi/wacomcpl-exec +++ b/src/wacomxi/wacomcpl-exec @@ -102,20 +102,20 @@ proc updateXinitrc {device option value} { if { [ file exists ~/.xsession ] } { file copy -force ~/.xsession ~/.xsession.bak file copy -force ~/.xsession /tmp/xsession1 - exec sed -e "/xsetwacom set $device $option /d" /tmp/xsession1 > /tmp/wacom - exec echo "xsetwacom set $device $option \"$value\"" > ~/.xsession + exec sed -e "/xsetwacom set \"$device\" $option /d" /tmp/xsession1 > /tmp/wacom + exec echo "xsetwacom set \"$device\" $option \"$value\"" > ~/.xsession exec cat /tmp/wacom >> ~/.xsession file delete -force /tmp/wacom /tmp/xsession1 } else { - exec echo "xsetwacom set $device $option \"$value\"" > ~/.xinitrc + exec echo "xsetwacom set \"$device\" $option \"$value\"" > ~/.xinitrc exec echo "# run the primary system script" >> ~/.xinitrc exec echo ". /etc/X11/xinit/xinitrc" >> ~/.xinitrc } } else { file copy -force ~/.xinitrc ~/.xinitrc.bak file copy -force ~/.xinitrc /tmp/xinitrc1 - exec sed -e "/xsetwacom set $device $option /d" /tmp/xinitrc1 > /tmp/wacom - exec echo "xsetwacom set $device $option \"$value\"" > ~/.xinitrc + exec sed -e "/xsetwacom set \"$device\" $option /d" /tmp/xinitrc1 > /tmp/wacom + exec echo "xsetwacom set \"$device\" $option \"$value\"" > ~/.xinitrc exec cat /tmp/wacom >> ~/.xinitrc file delete -force /tmp/wacom /tmp/xinitrc1 } @@ -126,9 +126,9 @@ proc updateXinitrc {device option value} { set index [ expr $index+1 ] set v$i [ lindex $value $index ] } - exec xsetwacom set $device $option $v1 $v2 $v3 $v4 + exec xsetwacom set "$device" $option $v1 $v2 $v3 $v4 } else { - exec xsetwacom set $device $option $value + exec xsetwacom set "$device" $option $value } } @@ -138,7 +138,7 @@ proc calibrationSequence {which xDev yDev} { global swapThresh screenWidth screenHeight global getDeviceModel screenXBottom screenYBottom - set scaling [exec xsetwacom get $device xscaling] + set scaling [exec xsetwacom get "$device" xscaling] set bottomX [exec xsetwacom getdefault $device BottomX] set bottomY [exec xsetwacom getdefault $device BottomY] if { $scaling == 1 } { @@ -265,7 +265,7 @@ proc startCalibration {} { # # Start calib sequence catch {unset calibResults} - exec xsetwacom set $device xydefault + exec xsetwacom set "$device" xydefault .topleft.m configure -background "#df94df" wacomxi::bindevent .topleft.m $device <ButtonRelease> \ {calibrationSequence 0 %0 %1} @@ -365,8 +365,8 @@ proc getDeviceOptionProc { dev i } { global numStrips numControls numButton spName for { set j 1 } { $j < [ expr $i+1 ] } { incr j 1 } { - set value [ exec xsetwacom get $dev $Option($j) ] - set value1 [ exec xsetwacom getdefault $dev $Option($j) ] + set value [ exec xsetwacom get "$dev" $Option($j) ] + set value1 [ exec xsetwacom getdefault "$dev" $Option($j) ] if { ![ string compare -nocase -length 10 $Option($j) "PressCurve" ] } { set getOption($dev,PressCurve) 4 set getOptionDefault($dev,PressCurve) 4 @@ -484,20 +484,26 @@ proc createDeviceList {} { global getDeviceModel set infoString [exec xsetwacom list] - set index 0 set devices "" - set dev [ lindex $infoString $index ] + + set index [ string first "\n" $infoString ] + set dev [ string range $infoString 0 $index] + while { $dev != "" } { - set index [ expr $index+1 ] - set type [ lindex $infoString $index ] + set type [ lindex $dev end ] + set dev [ lrange $dev 0 end-1 ] - if { [catch { exec xsetwacom get $dev TabletID } model] == 0} { + if { [catch { exec xsetwacom get "$dev" TabletID } model] == 0} { set getDeviceModel($dev,type) $type set getDeviceModel($dev,model) $model - set devices "$devices $dev" + set devices "$devices \"$dev\"" set index [ expr $index+1 ] } - set dev [ lindex $infoString $index ] + + set infoString [ string range $infoString $index end ] + set index [ string first "\n" $infoString ] + if { $index == -1 } { set index [ string length $infoString ] } + set dev [ string range $infoString 0 $index] } frame .workingDev @@ -539,12 +545,12 @@ proc createScreenList { dev } { global numScreens currentScreen global desktopHeight desktopWidth getScreenInfo - set numScreens($dev) [ exec xsetwacom get $dev NumScreen ] + set numScreens($dev) [ exec xsetwacom get "$dev" NumScreen ] for { set i 0 } {$i < $numScreens($dev)} { incr i 1 } { - set s1 [ exec xsetwacom get $dev SBottomX$i ] - set s2 [ exec xsetwacom get $dev SBottomY$i ] - set s3 [ exec xsetwacom get $dev STopX$i ] - set s4 [ exec xsetwacom get $dev STopY$i ] + set s1 [ exec xsetwacom get "$dev" SBottomX$i ] + set s2 [ exec xsetwacom get "$dev" SBottomY$i ] + set s3 [ exec xsetwacom get "$dev" STopX$i ] + set s4 [ exec xsetwacom get "$dev" STopY$i ] set getScreenInfo($dev,Screen$i) "$s1 $s2 $s3 $s4" } } @@ -1288,7 +1294,7 @@ proc initialSet {} { proc updateSet {} { global device currentW tvd snd - set numS [ exec xsetwacom get $device NumScreen ] + set numS [ exec xsetwacom get "$device" NumScreen ] if { $numS > 1 } { set sn [ $currentW.f.snsmenu cget -text ] @@ -1316,7 +1322,7 @@ proc updateSet {} { set tv 1 } - set tvID [ exec xsetwacom get $device TwinView ] + set tvID [ exec xsetwacom get "$device" TwinView ] if { $tv != $tvID } { updateXinitrc $device TwinView $tv set getOption($device,TwinView) $tv @@ -1503,7 +1509,7 @@ proc touchState { theCButton } { global device touchButton getDeviceModel set touchButton 0 - if { $touchButton == [exec xsetwacom get $device touch] } { + if { $touchButton == [exec xsetwacom get "$device" touch] } { set touchButton 1 } checkbutton $theCButton -text "Disable Touch" -anchor w \ @@ -1561,8 +1567,8 @@ proc updateTouch {} { proc defaultTouch {} { global touchButton currentW getOptionDefault device - if { [ exec xsetwacom get $device touch ] != $getOptionDefault($device,touch) } { - set touchButton [ exec xsetwacom get $device touch ] + if { [ exec xsetwacom get "$device" touch ] != $getOptionDefault($device,touch) } { + set touchButton [ exec xsetwacom get "$device" touch ] if { [ exec xsetwacom getdefault $device capacity ] < 0 } { if { $touchButton == 0 } { .panel.calibrate configure -state normal @@ -1583,14 +1589,14 @@ proc switchTouch { window } { return } - if { $touchButton == [ exec xsetwacom get $device touch ] } { + if { $touchButton == [ exec xsetwacom get "$device" touch ] } { if { $touchButton == 0 } { .panel.calibrate configure -state normal - exec xsetwacom set $device touch 1 + exec xsetwacom set "$device" touch 1 updateXinitrc $device touch 1 } else { .panel.calibrate configure -state disabled - exec xsetwacom set $device touch 0 + exec xsetwacom set "$device" touch 0 updateXinitrc $device touch 0 } } @@ -1613,7 +1619,7 @@ proc createPanel { pressure button mapping calibrate } { getNumButton $type setspName - set SN [ exec xsetwacom get $device ToolSerial ] + set SN [ exec xsetwacom get "$device" ToolSerial ] if { $SN && [string compare type "pad"] } { set hexSN [format %X $SN] label .panel.sn -text "Serial Number: $hexSN" @@ -1633,7 +1639,7 @@ proc createPanel { pressure button mapping calibrate } { button .panel.pressure -text $wName(1) \ -state normal -command "displaySubWindow \ updateTouch defaultTouch initialTouch 1 0 0" - if { [ exec xsetwacom get $device touch ] == 1 } { + if { [ exec xsetwacom get "$device" touch ] == 1 } { .panel.calibrate configure -state normal } else { .panel.calibrate configure -state disable -- 1.6.6 ------------------------------------------------------------------------------ This SF.Net email is sponsored by the Verizon Developer Community Take advantage of Verizon's best-in-class app development support A streamlined, 14 day to market process makes app distribution fast and easy Join now and get one step closer to millions of Verizon customers http://p.sf.net/sfu/verizon-dev2dev _______________________________________________ Linuxwacom-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
