Call UpdateButtons on mouse_movement data for ALPS device

This fixes problem with B_MOUSE_DOWN messages produced by Thinkpad
TrackPoint buttons. Those messages have 'clicks' parameter always
equal to zero. Solution was suggested by korli. Thanks!

Fixes #8978

Signed-off-by: Siarzhuk Zharski <[email protected]>
This commit is contained in:
Michael Kanis
2013-01-31 21:41:14 +01:00
committed by Siarzhuk Zharski
parent c33a865c7c
commit 777178a56f
3 changed files with 11 additions and 8 deletions
@@ -483,7 +483,7 @@ TouchpadMovement::_EdgeMotion(mouse_movement *movement, touch_event *event,
Also, it sets the button state from movement->buttons.
*/
void
TouchpadMovement::_UpdateButtons(mouse_movement *movement)
TouchpadMovement::UpdateButtons(mouse_movement *movement)
{
// set click count correctly according to double click timeout
if (movement->buttons != 0 && fButtonsState == 0) {
@@ -549,7 +549,7 @@ TouchpadMovement::_NoTouchToMovement(touch_event *event,
}
movement->buttons = buttons;
_UpdateButtons(movement);
UpdateButtons(movement);
}
@@ -601,7 +601,7 @@ TouchpadMovement::_MoveToMovement(touch_event *event, mouse_movement *movement)
fTapDeltaY = 0;
}
_UpdateButtons(movement);
UpdateButtons(movement);
}
@@ -111,11 +111,12 @@ public:
bool TapDragStarted() { return fTapdragStarted; }
bool WasEdgeMotion() { return fValidEdgeMotion; }
void UpdateButtons(mouse_movement *movement);
bigtime_t click_speed;
private:
bool _EdgeMotion(mouse_movement *movement,
touch_event *event, bool validStart);
inline void _UpdateButtons(mouse_movement *movement);
inline void _NoTouchToMovement(touch_event *event,
mouse_movement *movement);
inline void _MoveToMovement(touch_event *event,
@@ -215,7 +215,7 @@ get_alps_movment(alps_cookie *cookie, mouse_movement *movement)
}
event.buttons = event_buffer[3] & 7;
event.zPressure = event_buffer[5];
event.zPressure = event_buffer[5];
// finger on touchpad
if (event_buffer[2] & 0x2) {
@@ -236,8 +236,8 @@ get_alps_movment(alps_cookie *cookie, mouse_movement *movement)
cookie->previousZ = event.zPressure;
event.xPosition = event_buffer[1] | ((event_buffer[2] & 0x78) << 4);
event.yPosition = event_buffer[4] | ((event_buffer[3] & 0x70) << 3);
event.xPosition = event_buffer[1] | ((event_buffer[2] & 0x78) << 4);
event.yPosition = event_buffer[4] | ((event_buffer[3] & 0x70) << 3);
// check for trackpoint even (z pressure 127)
if (sFoundModel->flags & ALPS_DUALPOINT && event.zPressure == 127) {
@@ -248,9 +248,11 @@ get_alps_movment(alps_cookie *cookie, mouse_movement *movement)
movement->wheel_xdelta = 0;
movement->wheel_ydelta = 0;
movement->buttons = event.buttons;
movement->timestamp = system_time();
cookie->movementMaker.UpdateButtons(movement);
} else {
event.yPosition = AREA_END_Y - (event.yPosition - AREA_START_Y);
status = cookie->movementMaker.EventToMovement(&event, movement);
status = cookie->movementMaker.EventToMovement(&event, movement);
}
if (cookie->movementMaker.WasEdgeMotion()