input_server/tablet: Only send event messages when pen is in range.
When the pen is moved out of range, the Wacom tablet sends one last message with all values set to 0 and the In Range value set to false. Don't send mouse event messages in this case. Change-Id: I419d57cede47a6ef40a160322f3025ef372ecaa3 Reviewed-on: https://review.haiku-os.org/c/1448 Reviewed-by: waddlesplash <[email protected]> Reviewed-by: Stephan Aßmus <[email protected]>
This commit is contained in:
committed by
Stephan Aßmus
parent
45c3eb3a3c
commit
7625dca0e9
@@ -322,61 +322,65 @@ TabletDevice::_ControlThread()
|
|||||||
movements.pressure, movements.wheel_xdelta, movements.wheel_ydelta,
|
movements.pressure, movements.wheel_xdelta, movements.wheel_ydelta,
|
||||||
movements.eraser ? 'y' : 'n', movements.tilt_x, movements.tilt_y);
|
movements.eraser ? 'y' : 'n', movements.tilt_x, movements.tilt_y);
|
||||||
|
|
||||||
// Send single messages for each event
|
// Only send messages when pen is in range
|
||||||
|
|
||||||
uint32 buttons = lastButtons ^ movements.buttons;
|
if (movements.has_contact) {
|
||||||
if (buttons != 0) {
|
// Send single messages for each event
|
||||||
bool pressedButton = (buttons & movements.buttons) > 0;
|
|
||||||
BMessage* message = _BuildMouseMessage(
|
|
||||||
pressedButton ? B_MOUSE_DOWN : B_MOUSE_UP,
|
|
||||||
movements.timestamp, movements.buttons, movements.xpos,
|
|
||||||
movements.ypos);
|
|
||||||
if (message != NULL) {
|
|
||||||
if (pressedButton) {
|
|
||||||
message->AddInt32("clicks", movements.clicks);
|
|
||||||
LOG_EVENT("B_MOUSE_DOWN\n");
|
|
||||||
} else
|
|
||||||
LOG_EVENT("B_MOUSE_UP\n");
|
|
||||||
|
|
||||||
fTarget.EnqueueMessage(message);
|
uint32 buttons = lastButtons ^ movements.buttons;
|
||||||
lastButtons = movements.buttons;
|
if (buttons != 0) {
|
||||||
}
|
bool pressedButton = (buttons & movements.buttons) > 0;
|
||||||
}
|
BMessage* message = _BuildMouseMessage(
|
||||||
|
pressedButton ? B_MOUSE_DOWN : B_MOUSE_UP,
|
||||||
|
movements.timestamp, movements.buttons, movements.xpos,
|
||||||
|
movements.ypos);
|
||||||
|
if (message != NULL) {
|
||||||
|
if (pressedButton) {
|
||||||
|
message->AddInt32("clicks", movements.clicks);
|
||||||
|
LOG_EVENT("B_MOUSE_DOWN\n");
|
||||||
|
} else
|
||||||
|
LOG_EVENT("B_MOUSE_UP\n");
|
||||||
|
|
||||||
if (movements.xpos != lastXPosition
|
fTarget.EnqueueMessage(message);
|
||||||
|| movements.ypos != lastYPosition) {
|
lastButtons = movements.buttons;
|
||||||
BMessage* message = _BuildMouseMessage(B_MOUSE_MOVED,
|
|
||||||
movements.timestamp, movements.buttons, movements.xpos,
|
|
||||||
movements.ypos);
|
|
||||||
if (message != NULL) {
|
|
||||||
message->AddFloat("be:tablet_x", movements.xpos);
|
|
||||||
message->AddFloat("be:tablet_y", movements.ypos);
|
|
||||||
message->AddFloat("be:tablet_pressure", movements.pressure);
|
|
||||||
message->AddInt32("be:tablet_eraser", movements.eraser);
|
|
||||||
if (movements.tilt_x != 0.0 || movements.tilt_y != 0.0) {
|
|
||||||
message->AddFloat("be:tablet_tilt_x", movements.tilt_x);
|
|
||||||
message->AddFloat("be:tablet_tilt_y", movements.tilt_y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fTarget.EnqueueMessage(message);
|
|
||||||
lastXPosition = movements.xpos;
|
|
||||||
lastYPosition = movements.ypos;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (movements.wheel_ydelta != 0 || movements.wheel_xdelta != 0) {
|
if (movements.xpos != lastXPosition
|
||||||
BMessage* message = new BMessage(B_MOUSE_WHEEL_CHANGED);
|
|| movements.ypos != lastYPosition) {
|
||||||
if (message == NULL)
|
BMessage* message = _BuildMouseMessage(B_MOUSE_MOVED,
|
||||||
continue;
|
movements.timestamp, movements.buttons, movements.xpos,
|
||||||
|
movements.ypos);
|
||||||
|
if (message != NULL) {
|
||||||
|
message->AddFloat("be:tablet_x", movements.xpos);
|
||||||
|
message->AddFloat("be:tablet_y", movements.ypos);
|
||||||
|
message->AddFloat("be:tablet_pressure", movements.pressure);
|
||||||
|
message->AddInt32("be:tablet_eraser", movements.eraser);
|
||||||
|
if (movements.tilt_x != 0.0 || movements.tilt_y != 0.0) {
|
||||||
|
message->AddFloat("be:tablet_tilt_x", movements.tilt_x);
|
||||||
|
message->AddFloat("be:tablet_tilt_y", movements.tilt_y);
|
||||||
|
}
|
||||||
|
|
||||||
if (message->AddInt64("when", movements.timestamp) == B_OK
|
fTarget.EnqueueMessage(message);
|
||||||
&& message->AddFloat("be:wheel_delta_x",
|
lastXPosition = movements.xpos;
|
||||||
movements.wheel_xdelta) == B_OK
|
lastYPosition = movements.ypos;
|
||||||
&& message->AddFloat("be:wheel_delta_y",
|
}
|
||||||
movements.wheel_ydelta) == B_OK)
|
}
|
||||||
fTarget.EnqueueMessage(message);
|
|
||||||
else
|
if (movements.wheel_ydelta != 0 || movements.wheel_xdelta != 0) {
|
||||||
delete message;
|
BMessage* message = new BMessage(B_MOUSE_WHEEL_CHANGED);
|
||||||
|
if (message == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (message->AddInt64("when", movements.timestamp) == B_OK
|
||||||
|
&& message->AddFloat("be:wheel_delta_x",
|
||||||
|
movements.wheel_xdelta) == B_OK
|
||||||
|
&& message->AddFloat("be:wheel_delta_y",
|
||||||
|
movements.wheel_ydelta) == B_OK)
|
||||||
|
fTarget.EnqueueMessage(message);
|
||||||
|
else
|
||||||
|
delete message;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user