From e7b980ae964927d027de68727baa34d6a54e4077 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Wed, 1 Jun 2005 07:54:54 +0000 Subject: [PATCH] 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 --- .../devices/mouse/MouseInputDevice.cpp | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/add-ons/input_server/devices/mouse/MouseInputDevice.cpp b/src/add-ons/input_server/devices/mouse/MouseInputDevice.cpp index f77540d3e2..4ef79fdf97 100644 --- a/src/add-ons/input_server/devices/mouse/MouseInputDevice.cpp +++ b/src/add-ons/input_server/devices/mouse/MouseInputDevice.cpp @@ -336,7 +336,7 @@ MouseInputDevice::DeviceWatcher(void *arg) mouse_movement movements; uint32 buttons_state = 0; - BMessage *message; + BMessage *message = NULL; while (dev->active) { memset(&movements, 0, sizeof(movements)); if (ioctl(dev->fd, MS_READ, &movements) < B_OK) @@ -352,11 +352,19 @@ MouseInputDevice::DeviceWatcher(void *arg) int32 ydelta = movements.ydelta * dev->settings.accel.speed >> 15; 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. - // This could be the cause of the bug in RootLayer.cpp: - // "mouse position changed in B_MOUSE_DOWN from last B_MOUSE_MOVED". - // Might be wiser to switch the order. + + 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 (buttons != 0) { message = new BMessage(B_MOUSE_UP); if ((buttons & movements.buttons) > 0) { @@ -374,19 +382,7 @@ MouseInputDevice::DeviceWatcher(void *arg) sSingletonMouseDevice->EnqueueMessage(message); 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)) { message = new BMessage(B_MOUSE_WHEEL_CHANGED); if (message) {