now we send B_MOUSE_MOVED before any other message. This should fix the problem described in the TODO item. At least, it does over here.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12917 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -336,7 +336,7 @@ MouseInputDevice::DeviceWatcher(void *arg)
|
|||||||
|
|
||||||
mouse_movement movements;
|
mouse_movement movements;
|
||||||
uint32 buttons_state = 0;
|
uint32 buttons_state = 0;
|
||||||
BMessage *message;
|
BMessage *message = NULL;
|
||||||
while (dev->active) {
|
while (dev->active) {
|
||||||
memset(&movements, 0, sizeof(movements));
|
memset(&movements, 0, sizeof(movements));
|
||||||
if (ioctl(dev->fd, MS_READ, &movements) < B_OK)
|
if (ioctl(dev->fd, MS_READ, &movements) < B_OK)
|
||||||
@@ -353,10 +353,18 @@ MouseInputDevice::DeviceWatcher(void *arg)
|
|||||||
|
|
||||||
LOG("%s: x: %ld, y: %ld, \n", dev->device_ref.name, xdelta, ydelta);
|
LOG("%s: x: %ld, y: %ld, \n", dev->device_ref.name, xdelta, ydelta);
|
||||||
|
|
||||||
// TODO: Here we send B_MOUSE_UP/DOWN before B_MOUSE_MOVED.
|
if (movements.xdelta != 0 || movements.ydelta != 0) {
|
||||||
// This could be the cause of the bug in RootLayer.cpp:
|
message = new BMessage(B_MOUSE_MOVED);
|
||||||
// "mouse position changed in B_MOUSE_DOWN from last B_MOUSE_MOVED".
|
if (message) {
|
||||||
// Might be wiser to switch the order.
|
message->AddInt64("when", movements.timestamp);
|
||||||
|
message->AddInt32("buttons", movements.buttons);
|
||||||
|
message->AddInt32("x", xdelta);
|
||||||
|
message->AddInt32("y", ydelta);
|
||||||
|
|
||||||
|
sSingletonMouseDevice->EnqueueMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (buttons != 0) {
|
if (buttons != 0) {
|
||||||
message = new BMessage(B_MOUSE_UP);
|
message = new BMessage(B_MOUSE_UP);
|
||||||
if ((buttons & movements.buttons) > 0) {
|
if ((buttons & movements.buttons) > 0) {
|
||||||
@@ -375,18 +383,6 @@ MouseInputDevice::DeviceWatcher(void *arg)
|
|||||||
buttons_state = movements.buttons;
|
buttons_state = movements.buttons;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (movements.xdelta != 0 || movements.ydelta != 0) {
|
|
||||||
message = new BMessage(B_MOUSE_MOVED);
|
|
||||||
if (message) {
|
|
||||||
message->AddInt64("when", movements.timestamp);
|
|
||||||
message->AddInt32("buttons", movements.buttons);
|
|
||||||
message->AddInt32("x", xdelta);
|
|
||||||
message->AddInt32("y", ydelta);
|
|
||||||
|
|
||||||
sSingletonMouseDevice->EnqueueMessage(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((movements.wheel_ydelta != 0) || (movements.wheel_xdelta != 0)) {
|
if ((movements.wheel_ydelta != 0) || (movements.wheel_xdelta != 0)) {
|
||||||
message = new BMessage(B_MOUSE_WHEEL_CHANGED);
|
message = new BMessage(B_MOUSE_WHEEL_CHANGED);
|
||||||
if (message) {
|
if (message) {
|
||||||
|
|||||||
Reference in New Issue
Block a user