aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/evdev.c25
-rw-r--r--src/evdev.h1
2 files changed, 18 insertions, 8 deletions
diff --git a/src/evdev.c b/src/evdev.c
index 0078881..2f7da51 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -887,7 +887,7 @@ EvdevProbe(InputInfoPtr pInfo)
char key_bitmask[(KEY_MAX + 7) / 8];
char rel_bitmask[(REL_MAX + 7) / 8];
char abs_bitmask[(ABS_MAX + 7) / 8];
- int i, has_axes, has_buttons, has_keys;
+ int i, has_axes, has_keys, num_buttons;
EvdevPtr pEvdev = pInfo->private;
if (ioctl(pInfo->fd, EVIOCGRAB, (void *)1)) {
@@ -921,15 +921,15 @@ EvdevProbe(InputInfoPtr pInfo)
}
has_axes = FALSE;
- has_buttons = FALSE;
has_keys = FALSE;
+ num_buttons = 0;
if (TestBit(REL_X, rel_bitmask) && TestBit(REL_Y, rel_bitmask)) {
xf86Msg(X_INFO, "%s: Found x and y relative axes\n", pInfo->name);
pEvdev->flags |= EVDEV_RELATIVE_EVENTS;
has_axes = TRUE;
}
-
+
if (TestBit(ABS_X, abs_bitmask) && TestBit(ABS_Y, abs_bitmask)) {
xf86Msg(X_INFO, "%s: Found x and y absolute axes\n", pInfo->name);
pEvdev->flags |= EVDEV_ABSOLUTE_EVENTS;
@@ -941,10 +941,19 @@ EvdevProbe(InputInfoPtr pInfo)
has_axes = TRUE;
}
- if (TestBit(BTN_LEFT, key_bitmask)) {
- xf86Msg(X_INFO, "%s: Found mouse buttons\n", pInfo->name);
- pEvdev->flags |= EVDEV_BUTTON_EVENTS;
- has_buttons = TRUE;
+ /* count all buttons */
+ for (i = BTN_MISC; i < BTN_JOYSTICK; i++)
+ {
+ if (TestBit(i, key_bitmask))
+ num_buttons++;
+ }
+
+ if (num_buttons)
+ {
+ pEvdev->flags |= EVDEV_BUTTON_EVENTS;
+ pEvdev->buttons = num_buttons;
+ xf86Msg(X_INFO, "%s: Found %d mouse buttons\n", pInfo->name,
+ num_buttons);
}
for (i = 0; i < BTN_MISC; i++)
@@ -957,7 +966,7 @@ EvdevProbe(InputInfoPtr pInfo)
has_keys = TRUE;
}
- if (has_axes && has_buttons) {
+ if (has_axes && num_buttons) {
xf86Msg(X_INFO, "%s: Configuring as mouse\n", pInfo->name);
pInfo->flags |= XI86_POINTER_CAPABLE | XI86_SEND_DRAG_EVENTS |
XI86_CONFIGURED;
diff --git a/src/evdev.h b/src/evdev.h
index cad1eed..c6a6e99 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -47,6 +47,7 @@ typedef struct {
int abs_x, abs_y, old_x, old_y;
int flags;
int tool;
+ int buttons; /* number of buttons */
/* XKB stuff has to be per-device rather than per-driver */
int noXkb;