summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Osterlund <petero2@telia.com>2004-07-31 03:01:37 +0200
committerPeter Osterlund <petero2@telia.com>2006-04-09 04:02:44 +0200
commit7b610b2d4bbfb72f31cc631c16be07973fbe8a16 (patch)
tree9d6203f9ce028c9e96601ad78b4546882ad9c864
parentb46a57ef3dd6d18da812dfe00f44690605a429e5 (diff)
Fixed some problems with ALPS guest devices.
From Alastair M. Robinson: * The guest mouse doesn't report button releases. * The stick pointer has buttons of its own, and they don't work. Attached is another patch, this one far less invasive than the last, which fixes these two problems. (The button presses that come from the stick pointer's buttons arrive in events with pressure set to 127, just like stick movement - but this doesn't seem to be terribly reliable - I think the button release gets reported with true pressure when the touchpad is being used too. For this reason, I've set these up to report as ->left / ->right, not as ->guest_left / ->guest_right.) * One issue that remains - the middle button emulation for two button mice doesn't seem to work for the guest mouse. Fixed by me.
-rw-r--r--alpscomm.c11
-rw-r--r--synaptics.c11
2 files changed, 12 insertions, 10 deletions
diff --git a/alpscomm.c b/alpscomm.c
index 01db0d7..992f4c5 100644
--- a/alpscomm.c
+++ b/alpscomm.c
@@ -160,10 +160,8 @@ ALPS_process_packet(unsigned char *packet, struct SynapticsHwState *hw)
y = y - 256;
hw->guest_dx = x;
hw->guest_dy = -y;
- if (packet[0] & 0x01)
- hw->guest_left = 1;
- if (packet[0] & 0x02)
- hw->guest_right = 1;
+ hw->guest_left = (packet[0] & 0x01) ? TRUE : FALSE;
+ hw->quest_right = (packet[0] & 0x02) ? TRUE : FALSE;
return;
}
@@ -178,7 +176,10 @@ ALPS_process_packet(unsigned char *packet, struct SynapticsHwState *hw)
y = y - 512;
hw->guest_dx = x;
hw->guest_dy = -y;
- z = 0;
+ hw->left = packet[2] & 1;
+ hw->left |= packet[3] & 1;
+ hw->right = (packet[2] >> 1) & 1;
+ hw->right |= (packet[3] >> 1) & 1;
return;
}
diff --git a/synaptics.c b/synaptics.c
index 8e26c23..7e72453 100644
--- a/synaptics.c
+++ b/synaptics.c
@@ -1323,6 +1323,12 @@ HandleState(LocalDevicePtr local, struct SynapticsHwState *hw)
hw->up |= hw->multi[0];
hw->down |= hw->multi[1];
+ if (!para->guestmouse_off) {
+ hw->left |= hw->guest_left;
+ hw->middle |= hw->guest_mid;
+ hw->right |= hw->guest_right;
+ }
+
/* 3rd button emulation */
hw->middle |= HandleMidButtonEmulation(priv, hw, &delay);
@@ -1369,11 +1375,6 @@ HandleState(LocalDevicePtr local, struct SynapticsHwState *hw)
timeleft = ComputeDeltas(priv, hw, edge, &dx, &dy);
delay = MIN(delay, timeleft);
- if (!para->guestmouse_off) {
- hw->left |= hw->guest_left;
- hw->middle |= hw->guest_mid;
- hw->right |= hw->guest_right;
- }
buttons = ((hw->left ? 0x01 : 0) |
(hw->middle ? 0x02 : 0) |
(hw->right ? 0x04 : 0) |