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:
committed by
Siarzhuk Zharski
parent
c33a865c7c
commit
777178a56f
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user