Skip to content

Commit

Permalink
Call UpdateButtons on mouse_movement data for ALPS device
Browse files Browse the repository at this point in the history
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 <zharik@gmx.li>
  • Loading branch information
michaelkanis authored and siarzhuk committed Jan 31, 2013
1 parent c33a865 commit 777178a
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 8 deletions.
6 changes: 3 additions & 3 deletions src/add-ons/kernel/bus_managers/ps2/movement_maker.cpp
Expand Up @@ -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) {
Expand Down Expand Up @@ -549,7 +549,7 @@ TouchpadMovement::_NoTouchToMovement(touch_event *event,
}

movement->buttons = buttons;
_UpdateButtons(movement);
UpdateButtons(movement);
}


Expand Down Expand Up @@ -601,7 +601,7 @@ TouchpadMovement::_MoveToMovement(touch_event *event, mouse_movement *movement)
fTapDeltaY = 0;
}

_UpdateButtons(movement);
UpdateButtons(movement);
}


Expand Down
3 changes: 2 additions & 1 deletion src/add-ons/kernel/bus_managers/ps2/movement_maker.h
Expand Up @@ -111,11 +111,12 @@ class TouchpadMovement : public MovementMaker {
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,
Expand Down
10 changes: 6 additions & 4 deletions src/add-ons/kernel/bus_managers/ps2/ps2_alps.cpp
Expand Up @@ -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) {
Expand All @@ -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) {
Expand All @@ -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()
Expand Down

0 comments on commit 777178a

Please sign in to comment.