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@codeweavers.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ae4651b7ff
commit
74efb3e872
|
@ -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 );
|
||||
|
|
Loading…
Reference in New Issue