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.
|
Also, it sets the button state from movement->buttons.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
TouchpadMovement::_UpdateButtons(mouse_movement *movement)
|
TouchpadMovement::UpdateButtons(mouse_movement *movement)
|
||||||
{
|
{
|
||||||
// set click count correctly according to double click timeout
|
// set click count correctly according to double click timeout
|
||||||
if (movement->buttons != 0 && fButtonsState == 0) {
|
if (movement->buttons != 0 && fButtonsState == 0) {
|
||||||
@@ -549,7 +549,7 @@ TouchpadMovement::_NoTouchToMovement(touch_event *event,
|
|||||||
}
|
}
|
||||||
|
|
||||||
movement->buttons = buttons;
|
movement->buttons = buttons;
|
||||||
_UpdateButtons(movement);
|
UpdateButtons(movement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -601,7 +601,7 @@ TouchpadMovement::_MoveToMovement(touch_event *event, mouse_movement *movement)
|
|||||||
fTapDeltaY = 0;
|
fTapDeltaY = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
_UpdateButtons(movement);
|
UpdateButtons(movement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -111,11 +111,12 @@ public:
|
|||||||
bool TapDragStarted() { return fTapdragStarted; }
|
bool TapDragStarted() { return fTapdragStarted; }
|
||||||
bool WasEdgeMotion() { return fValidEdgeMotion; }
|
bool WasEdgeMotion() { return fValidEdgeMotion; }
|
||||||
|
|
||||||
|
void UpdateButtons(mouse_movement *movement);
|
||||||
|
|
||||||
bigtime_t click_speed;
|
bigtime_t click_speed;
|
||||||
private:
|
private:
|
||||||
bool _EdgeMotion(mouse_movement *movement,
|
bool _EdgeMotion(mouse_movement *movement,
|
||||||
touch_event *event, bool validStart);
|
touch_event *event, bool validStart);
|
||||||
inline void _UpdateButtons(mouse_movement *movement);
|
|
||||||
inline void _NoTouchToMovement(touch_event *event,
|
inline void _NoTouchToMovement(touch_event *event,
|
||||||
mouse_movement *movement);
|
mouse_movement *movement);
|
||||||
inline void _MoveToMovement(touch_event *event,
|
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.buttons = event_buffer[3] & 7;
|
||||||
event.zPressure = event_buffer[5];
|
event.zPressure = event_buffer[5];
|
||||||
|
|
||||||
// finger on touchpad
|
// finger on touchpad
|
||||||
if (event_buffer[2] & 0x2) {
|
if (event_buffer[2] & 0x2) {
|
||||||
@@ -236,8 +236,8 @@ get_alps_movment(alps_cookie *cookie, mouse_movement *movement)
|
|||||||
|
|
||||||
cookie->previousZ = event.zPressure;
|
cookie->previousZ = event.zPressure;
|
||||||
|
|
||||||
event.xPosition = event_buffer[1] | ((event_buffer[2] & 0x78) << 4);
|
event.xPosition = event_buffer[1] | ((event_buffer[2] & 0x78) << 4);
|
||||||
event.yPosition = event_buffer[4] | ((event_buffer[3] & 0x70) << 3);
|
event.yPosition = event_buffer[4] | ((event_buffer[3] & 0x70) << 3);
|
||||||
|
|
||||||
// check for trackpoint even (z pressure 127)
|
// check for trackpoint even (z pressure 127)
|
||||||
if (sFoundModel->flags & ALPS_DUALPOINT && event.zPressure == 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_xdelta = 0;
|
||||||
movement->wheel_ydelta = 0;
|
movement->wheel_ydelta = 0;
|
||||||
movement->buttons = event.buttons;
|
movement->buttons = event.buttons;
|
||||||
|
movement->timestamp = system_time();
|
||||||
|
cookie->movementMaker.UpdateButtons(movement);
|
||||||
} else {
|
} else {
|
||||||
event.yPosition = AREA_END_Y - (event.yPosition - AREA_START_Y);
|
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()
|
if (cookie->movementMaker.WasEdgeMotion()
|
||||||
|
|||||||
Reference in New Issue
Block a user