=?UTF-8?Q?R=C3=A9mi=20Bernon=20?=: winex11.drv: Only call XWarpPointer if we can get exclusive pointer grab.

Alexandre Julliard julliard at winehq.org
Fri Sep 6 16:05:42 CDT 2019


Module: wine
Branch: master
Commit: 74efb3e872aebf57a42d62b52e149ae26f320c9a
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=74efb3e872aebf57a42d62b52e149ae26f320c9a

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Fri Aug 30 12:18:03 2019 +0200

winex11.drv: Only call XWarpPointer if we can get exclusive pointer grab.

XWarpPointer will always succeed, regardless of grabs, so if the pointer
is already grabbed, by some other application, we should not ask to warp
it.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winex11.drv/mouse.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index fff6fc7..8d1dc5e 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -1467,8 +1467,21 @@ BOOL CDECL X11DRV_SetCursorPos( INT x, INT y )
         return FALSE;
     }
 
+    if (!clipping_cursor &&
+        XGrabPointer( data->display, root_window, False,
+                      PointerMotionMask | ButtonPressMask | ButtonReleaseMask,
+                      GrabModeAsync, GrabModeAsync, root_window, None, CurrentTime ) != GrabSuccess)
+    {
+        WARN( "refusing to warp pointer to %u, %u without exclusive grab\n", pos.x, pos.y );
+        return FALSE;
+    }
+
     XWarpPointer( data->display, root_window, root_window, 0, 0, 0, 0, pos.x, pos.y );
     data->warp_serial = NextRequest( data->display );
+
+    if (!clipping_cursor)
+        XUngrabPointer( data->display, CurrentTime );
+
     XNoOp( data->display );
     XFlush( data->display ); /* avoids bad mouse lag in games that do their own mouse warping */
     TRACE( "warped to %d,%d serial %lu\n", x, y, data->warp_serial );




More information about the wine-cvs mailing list