As reported in two Debian bug reports [1] [2], the ability for the EmulateWheelButton to generate button events was broken shortly before the 6.9 release. It is still broken in current Debian unstable package 6.9.0.dfsg.1-3, and I believe it is still broken in x.org CVS.
It was broken by version 1.15 of xc/programs/Xserver/hw/xfree86/input/mouse/mouse.c. The problem is the removal of the truebuttons variable. The wheel emulation code in MouseDoPostEvent modifies buttons to mask out EmulateWheelButton, therefore the if condition if (buttons != pMse->lastMappedButtons) { (line 2256) was failing when the EmulateWheelButton was pressed, therefore pMse->lastMappedButtons = buttons; (line 2359) was not being run, therefore when the EmulateWheelButton was released, change = buttons ^ pMse->lastMappedButtons; (line 2162) thought there was no change, therefore the button press was not generated. The appended patch fixes this by restoring truebuttons (which I called origbuttons to be slightly clearer). The logic is very similar to before 1.15, and it does not appear to interfere with the mapping changes in 1.15, so I don't think it will introduce any problems that weren't already there. I tested that I can now generate a button press with EmulateWheelButton. The patch was generated against the latest Debian unstable sources, but applies cleanly to the latest CVS. Andrew [1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=320136 [2] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=346098 [3] http://cvs.freedesktop.org/xorg/xc/programs/Xserver/hw/xfree86/input/mouse/mouse.c?r1=1.14&r2=1.15 --- mouse.c.orig 2006-01-12 13:46:21.000000000 -0800 +++ mouse.c 2006-01-12 14:10:46.000000000 -0800 @@ -2076,7 +2076,7 @@ MouseDoPostEvent(InputInfoPtr pInfo, int buttons, int dx, int dy) { MouseDevPtr pMse; - int emulateButtons; + int origbuttons, emulateButtons; int id, change; int emuWheelDelta, emuWheelButton, emuWheelButtonMask; int wheelButtonMask; @@ -2084,6 +2084,8 @@ pMse = pInfo->private; + origbuttons = buttons; + /* Do single button double click */ if (pMse->doubleClickSourceButtonMask) { if (buttons & pMse->doubleClickSourceButtonMask) { @@ -2211,7 +2213,7 @@ if (dx || dy) xf86PostMotionEvent(pInfo->dev, 0, 0, 2, dx, dy); - if (buttons != pMse->lastMappedButtons) { + if (origbuttons != pMse->lastMappedButtons) { change = buttons ^ pMse->lastMappedButtons; @@ -2314,7 +2316,7 @@ (buttons & (1 << (id - 1))), 0, 0); } - pMse->lastMappedButtons = buttons; + pMse->lastMappedButtons = origbuttons; } } -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]