[PATCH evdev v2] Disable middle mouse button emulation by default.

Peter Hutterer peter.hutterer at who-t.net
Sun May 30 16:01:09 PDT 2010


The AUTO feature was the default, MB emulation was on until a middle mouse
button was pressed. MB emulation however results in a delay of the first
press, causing minor annoyances to the users and being generally confusing
when the behaviour before a button press is different to after a button
pres.

Disable the feature by default instead. There's not a lot of two-button mice
around anymore though and the inability to detect two-button mice makes for
non-deterministic detection of when the emulation should be on.

Middle button emulation can be enabled with a configuration snippet:

Section "InputClass"
        Identifier "middle button emulation"
        MatchIsPointer "on"
        Option "Emulate3Buttons" "on"
EndSection

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
Changes to v1:
- middle button emulation is disabled by default now

 man/evdev.man |    3 +--
 src/emuMB.c   |   38 +++-----------------------------------
 src/evdev.h   |    1 -
 3 files changed, 4 insertions(+), 38 deletions(-)

diff --git a/man/evdev.man b/man/evdev.man
index 49ab12c..1a93483 100644
--- a/man/evdev.man
+++ b/man/evdev.man
@@ -76,8 +76,7 @@ indicating that the next button pressed is to be
 .BI "Option \*qEmulate3Buttons\*q \*q" boolean \*q
 Enable/disable the emulation of the third (middle) mouse button for mice
 which only have two physical buttons.  The third button is emulated by
-pressing both buttons simultaneously.  Default: off for touchscreens, otherwise
-on until a middle mouse button event is registered. Property: "Evdev Middle
+pressing both buttons simultaneously.  Default: off. Property: "Evdev Middle
 Button Emulation".
 .TP 7
 .BI "Option \*qEmulate3Timeout\*q \*q" integer \*q
diff --git a/src/emuMB.c b/src/emuMB.c
index c33ea8e..764b30e 100644
--- a/src/emuMB.c
+++ b/src/emuMB.c
@@ -43,12 +43,6 @@
 
 #include <evdev-properties.h>
 
-enum {
-    MBEMU_DISABLED = 0,
-    MBEMU_ENABLED,
-    MBEMU_AUTO
-};
-
 #ifdef HAVE_PROPERTIES
 static Atom prop_mbemu     = 0; /* Middle button emulation on/off property */
 static Atom prop_mbtimeout = 0; /* Middle button timeout property */
@@ -232,11 +226,6 @@ EvdevMBEmuFilterEvent(InputInfoPtr pInfo, int button, BOOL press)
     if (!pEvdev->emulateMB.enabled)
         return ret;
 
-    if (button == 2) {
-        EvdevMBEmuEnable(pInfo, FALSE);
-        return ret;
-    }
-
     /* don't care about other buttons */
     if (button != 1 && button != 3)
         return ret;
@@ -311,20 +300,9 @@ EvdevMBEmuPreInit(InputInfoPtr pInfo)
 {
     EvdevPtr pEvdev = (EvdevPtr)pInfo->private;
 
-    if (pEvdev->flags & EVDEV_TOUCHSCREEN)
-        pEvdev->emulateMB.enabled = MBEMU_DISABLED;
-    else
-        pEvdev->emulateMB.enabled = MBEMU_AUTO;
-
-    if (xf86FindOption(pInfo->options, "Emulate3Buttons"))
-    {
-        pEvdev->emulateMB.enabled = xf86SetBoolOption(pInfo->options,
-                                                      "Emulate3Buttons",
-                                                      MBEMU_ENABLED);
-        xf86Msg(X_INFO, "%s: Forcing middle mouse button emulation %s.\n",
-                pInfo->name, (pEvdev->emulateMB.enabled) ? "on" : "off");
-    }
-
+    pEvdev->emulateMB.enabled = xf86SetBoolOption(pInfo->options,
+                                                  "Emulate3Buttons",
+                                                  FALSE);
     pEvdev->emulateMB.timeout = xf86SetIntOption(pInfo->options,
                                                  "Emulate3Timeout", 50);
 }
@@ -352,16 +330,6 @@ EvdevMBEmuFinalize(InputInfoPtr pInfo)
 
 }
 
-/* Enable/disable middle mouse button emulation. */
-void
-EvdevMBEmuEnable(InputInfoPtr pInfo, BOOL enable)
-{
-    EvdevPtr pEvdev = (EvdevPtr)pInfo->private;
-    if (pEvdev->emulateMB.enabled == MBEMU_AUTO)
-        pEvdev->emulateMB.enabled = enable;
-}
-
-
 #ifdef HAVE_PROPERTIES
 static int
 EvdevMBEmuSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val,
diff --git a/src/evdev.h b/src/evdev.h
index 8c89f83..4945140 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -214,7 +214,6 @@ void EvdevMBEmuBlockHandler(pointer, struct timeval**, pointer);
 void EvdevMBEmuPreInit(InputInfoPtr);
 void EvdevMBEmuOn(InputInfoPtr);
 void EvdevMBEmuFinalize(InputInfoPtr);
-void EvdevMBEmuEnable(InputInfoPtr, BOOL);
 
 /* Mouse Wheel emulation */
 void EvdevWheelEmuPreInit(InputInfoPtr pInfo);
-- 
1.6.5.2



More information about the xorg-devel mailing list