Alexandre Julliard : winex11: Add a helper function to check a motion event against the serial number.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Dec 1 09:32:58 CST 2015
Module: wine
Branch: master
Commit: 9d237f97fc94f7dcd8afe0763951c601be6449b2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9d237f97fc94f7dcd8afe0763951c601be6449b2
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Dec 1 17:42:01 2015 +0900
winex11: Add a helper function to check a motion event against the serial number.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winex11.drv/mouse.c | 40 +++++++++++++++++++++-------------------
1 file changed, 21 insertions(+), 19 deletions(-)
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index e462b55..356343d 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -520,6 +520,21 @@ BOOL clip_fullscreen_window( HWND hwnd, BOOL reset )
return grab_clipping_window( &rect );
}
+
+/***********************************************************************
+ * is_old_motion_event
+ */
+static BOOL is_old_motion_event( unsigned long serial )
+{
+ struct x11drv_thread_data *thread_data = x11drv_thread_data();
+
+ if (!thread_data->warp_serial) return FALSE;
+ if ((long)(serial - thread_data->warp_serial) < 0) return TRUE;
+ thread_data->warp_serial = 0; /* we caught up now */
+ return FALSE;
+}
+
+
/***********************************************************************
* send_mouse_input
*
@@ -1576,20 +1591,11 @@ void X11DRV_MotionNotify( HWND hwnd, XEvent *xev )
input.u.mi.time = EVENT_x11_time_to_win32_time( event->time );
input.u.mi.dwExtraInfo = 0;
- if (!hwnd)
+ if (!hwnd && is_old_motion_event( event->serial ))
{
- struct x11drv_thread_data *thread_data = x11drv_thread_data();
- if (thread_data->warp_serial)
- {
- if ((long)(event->serial - thread_data->warp_serial) < 0)
- {
- TRACE( "pos %d,%d old serial %lu, ignoring\n", input.u.mi.dx, input.u.mi.dy, event->serial );
- return;
- }
- thread_data->warp_serial = 0; /* we caught up now */
- }
+ TRACE( "pos %d,%d old serial %lu, ignoring\n", input.u.mi.dx, input.u.mi.dy, event->serial );
+ return;
}
-
send_mouse_input( hwnd, event->window, event->state, &input );
}
@@ -1677,14 +1683,10 @@ static void X11DRV_RawMotion( XGenericEventCookie *xev )
break;
}
- if (broken_rawevents && thread_data->warp_serial)
+ if (broken_rawevents && is_old_motion_event( xev->serial ))
{
- if ((long)(xev->serial - thread_data->warp_serial) < 0)
- {
- TRACE( "pos %d,%d old serial %lu, ignoring\n", input.u.mi.dx, input.u.mi.dy, xev->serial );
- return;
- }
- thread_data->warp_serial = 0; /* we caught up now */
+ TRACE( "pos %d,%d old serial %lu, ignoring\n", input.u.mi.dx, input.u.mi.dy, xev->serial );
+ return;
}
TRACE( "pos %d,%d (event %f,%f)\n", input.u.mi.dx, input.u.mi.dy, dx, dy );
More information about the wine-cvs
mailing list