Bug 3696

Summary: Cruise-control produces extra button presses on MX500,MX510,MX700, and MX1000.
Product: xorg Reporter: Daniel Stone <daniel>
Component: Input/evdevAssignee: Xorg Project Team <xorg-team>
Status: RESOLVED WONTFIX QA Contact: Xorg Project Team <xorg-team>
Severity: normal    
Priority: high CC: freedesktop-bugs, jlp.bugs, olivier.crete, peter.hutterer
Version: 7.0 (2005.12)Keywords: NEEDINFO
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
Proof-of-concept fix for Logitech Devices - PROBABLY ONLY WORKS WITH LX7 MOUSE none

Description FreeDesktop Bugzilla Database Corruption Fix User 2005-07-03 21:05:31 UTC
The above mice (and quite possibly more) feature "Cruise Control" buttons,
which, when pressed, produce a the affect of continuously operating the scroll
wheel, or scrolling in minimum increments when clicked without holding.

Given that the CC buttons are actually functional buttons, they also produce a
second button press/raise as if they were a completely seperate usable button.
Some people actually prefer to use it this way, and utilities exist (
http://freshmeat.net/projects/logitech_applet/ and
http://www.bedroomlan.org/~alexios/coding_lmctl.html ) which can disable the
cruise-control feature without disabling the regular button press.
Unfortunately, no such option exists to disable the regular button press without
disabling the cruise control function.

IMHO, the CC configuration that logitech_applet and lmctl have, plus the ability
to disable the regular presses that I would want, would ideally exist and be
accessable from xorg.conf. Regardless of whether or not this option is
available, the standard/default configuration should not generate these spurious
button presses. (Such button presses can be observed causing problems most
easilly by attempting to use the cruise control and dragging over text
simultaneously in a mozilla/galeon/firefox window, where the text will be selected.)

Note: This problem is often not reported by users of the MX500, MX510, and MX700
because a not-entirely-correct configuration can result in the cruise-control
buttons, which are the last buttons indexed by the hardware being cut off when
the # of buttons is configured artificially low. While this hack works with
these mices, it does not work with the MX1000, because it has additional buttons
*after* the cruise control.
Comment 1 FreeDesktop Bugzilla Database Corruption Fix User 2005-07-03 21:10:21 UTC
Further discussion of this issue can be found in a thread here:

http://lkml.org/lkml/2005/1/5/126

The relevant post by Vojtech Pavlik can be found here:

http://lkml.org/lkml/2005/3/8/250
Comment 2 FreeDesktop Bugzilla Database Corruption Fix User 2005-07-09 07:42:20 UTC
Cross-posted to http://bugzilla.kernel.org/show_bug.cgi?id=1786 and
https://bugs.freedesktop.org/show_bug.cgi?id=3696

logitech_applet ( http://freshmeat.net/projects/logitech_applet/ ) and more
recently lmctrl ( http://freshmeat.net/projects/lmctl/ ) will disable the
cruise-control, leaving only the regular button presses. Unfortunately they do
this by disabling one of the key features of these mice, the cruise control.

The way the mouse is designed to work, the way it's advertised, and the way it
functions under Windows and OSX is for the cruise control buttons to not
function as buttons, but only as the repeating scroll wheel events. It is
possible through special options to remap them under Windows and OSX to function
as seperate buttons, but this is a non-standard configuration. Whether done in
kernel-space or user space, one or the other must be configured, not both.

Given that the default in the non-linux world is to have repeated scroll events
without an extra button, I suggest that this should be the default configuration
under linux.

AFAICT, the only way to do this is to allow the hardware to continue sending
signals for the extra button press, but cause them to be ignored on some level.
My attempts to do this at a XFree86 and Xorg application level have only
resulted on both the button and cruise-control events being ignored together, so
as best as I can tell, the solution must be to filter the button press at the X
driver level or at the linux driver level. If this means a hack/work-around for
oddly behaving hardware, so be it.

Either that, or we disable the cruise-control by standard, and introduce some
kind of radical new infrastructure to communicate that certain buttons (11 and
12 in this case) are associated with a particular function, and need auto-repeat
emulated in user-space somewhere. As appealing as this idea is to me, it'll
require somebody taking a serious leadership role and significant re-working of
code to get all the widget environtments to talk the same language.

In lieu of that, a workaround at the kernel/X driver level is the easiest
cleanest solution I can personally think of. If anybody else has any other
suggestions on how to get these devices working properly after a year and a
half, I'm all ears.
Comment 3 Alan Coopersmith 2005-10-03 17:26:22 UTC
Original contents lost in bugzilla disk death.  xorg-team archives show:

           Summary: Cruise-control produces extra button presses on
                    MX500,MX510,MX700, and MX1000.
           Product: xorg
           Version: 6.8.2
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Input/Mouse
        AssignedTo: xorg-team at lists.x.org
        ReportedBy: atrus at bugs.freedesktop.spam.rifetech.com


The above mice (and quite possibly more) feature "Cruise Control" buttons,
which, when pressed, produce a the affect of continuously operating the scroll
wheel, or scrolling in minimum increments when clicked without holding.

Given that the CC buttons are actually functional buttons, they also produce a
second button press/raise as if they were a completely seperate usable button.
Some people actually prefer to use it this way, and utilities exist (
http://freshmeat.net/projects/logitech_applet/ and
http://www.bedroomlan.org/~alexios/coding_lmctl.html ) which can disable the
cruise-control feature without disabling the regular button press.
Unfortunately, no such option exists to disable the regular button press without
disabling the cruise control function.

IMHO, the CC configuration that logitech_applet and lmctl have, plus the ability
to disable the regular presses that I would want, would ideally exist and be
accessable from xorg.conf. Regardless of whether or not this option is
available, the standard/default configuration should not generate these spurious
button presses. (Such button presses can be observed causing problems most
easilly by attempting to use the cruise control and dragging over text
simultaneously in a mozilla/galeon/firefox window, where the text will be selected.)

Note: This problem is often not reported by users of the MX500, MX510, and MX700
because a not-entirely-correct configuration can result in the cruise-control
buttons, which are the last buttons indexed by the hardware being cut off when
the # of buttons is configured artificially low. While this hack works with
these mices, it does not work with the MX1000, because it has additional buttons
*after* the cruise control.          

------- Additional Comments From atrus at bugs.freedesktop.spam.rifetech.com 
2005-07-03 21:10 -------
Further discussion of this issue can be found in a thread here:

http://lkml.org/lkml/2005/1/5/126

The relevant post by Vojtech Pavlik can be found here:

http://lkml.org/lkml/2005/3/8/250          
     
Comment 4 Jeremy Nickurak 2006-05-15 14:43:33 UTC
Can anyone for whom the 7.1 evdev rewrite works confirm/deny if this bug is
still present? (It's just segfaulting for me here).
Comment 5 Olivier CrĂȘte 2006-09-27 20:26:13 UTC
Yea the problem is still in the latest CVS. The mouse really sends two button
events, and evdev relays them.. I guess evdev is stuck with having a special
case for that mouse... 
Comment 6 Mark Lodato 2006-11-11 15:48:52 UTC
Created attachment 7749 [details] [review]
Proof-of-concept fix for Logitech Devices - PROBABLY ONLY WORKS WITH LX7 MOUSE

I'm using the evdev-1.1.2 and a Logitech LX7 mouse.  Using the default config
(no extra xorg Options), I had the two problems expressed by others:
1) When using horizontal scroll (cruise control) left fires an extra button 11
event and right fires an extra button 12 event.
2) left/right scrolling is reversed (left fires button 7, right fires button 6)


When I add 'Option "HWHEELRelativeAxisButtons" "7 6"' to my xorg.conf:
1) Button 11/12 are still fired
2) Horizontal scrolling almost works.  The initial scroll is still wrong (7 for
left and 6 for right), but then the repeated events are correct (6 left, 7
right).

I believe the problem lies in the "fake button" approach of
EvdevBtnCalcRemap().  When the user starts a horizontal scroll (say left),
EvdevReadInput() immediately sees two events: a button press and a relative
axis movement.	In EvdevBtnProcess(), the button press is 6, but gets mapped
into 11 by "button = state->btn->map[button]".	If the remapping never
happened, and map[6] = 6, then it would work fine.  A similar case would hold
for button 7.

Therefore, I've attached a proof-of-concept patch (logitech_fix.patch) that
fixes the problem for me.  It probably won't work for mice other than the LX7,
but I don't know enough about the code to make a more general patch.  For me,
it fixes both problems 1 and 2.  I have no idea why this simple patch also
fixes #2 (wrong initial scroll), but it does.

I hope the maintainer of the evdev module can use this information to make a
more general solution.	If you need more information, please ask.
Comment 7 Daniel Stone 2007-02-27 01:27:17 UTC
Sorry about the phenomenal bug spam, guys.  Adding xorg-team@ to the QA contact so bugs don't get lost in future.
Comment 8 Peter Hutterer 2008-07-03 06:45:49 UTC
evdev has seen a fair amount of changes recently, and I guess the change you
proposed should be in as far as I interpret it. Can you please test with evdev
2.0.1 and check if the problem persists.

If it does, I'm happy to accept patches for 2.1.
Comment 9 Peter Hutterer 2008-09-09 21:55:20 UTC
Lack of feedback from reporter - INVALID.
Comment 10 Jeremy Nickurak 2012-03-25 11:15:27 UTC
Still present in xorg evdev 2.6.0 (as packaged in Ubuntu Oneric).
Comment 11 Peter Hutterer 2017-03-08 06:29:17 UTC
This hasn't seen any attention in over 5 years, let's not pretend we'll fix this.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.