Hash :
711a458b
Author :
Date :
2023-02-16T19:11:43
x11: Fix duplicate Xinput2 event reception Passing True for owner_events in the XGrabPointer call makes all XI_RawMotion events appear in the queue twice, with the only difference between them being the value of XGenericEventCookie::cookie. These have always been filtered out by a check in the XI_RawMotion handler, however with a mouse that polls at more than 1 kHz frequency, there also exist legitimate events that appear indistinguishable from these duplicated events. These must not be filtered out, otherwise the pointer may move at an inconsistent speed, appearing like a bad pointer acceleration implementation. Change owner_events to False in the XGrabPointer and remove the duplicate event detection code to fix this. Signed-off-by: Torge Matthies <openglfreak@googlemail.com> (cherry picked from commit f18b5656f6f859e4d4e096d290afd9fae884a5b8)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
/*
Simple DirectMedia Layer
Copyright (C) 1997-2023 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "../../SDL_internal.h"
#ifndef SDL_x11mouse_h_
#define SDL_x11mouse_h_
typedef struct SDL_XInput2DeviceInfo
{
int device_id;
SDL_bool relative[2];
double minval[2];
double maxval[2];
double prev_coords[2];
struct SDL_XInput2DeviceInfo *next;
} SDL_XInput2DeviceInfo;
extern void X11_InitMouse(_THIS);
extern void X11_QuitMouse(_THIS);
#endif /* SDL_x11mouse_h_ */
/* vi: set ts=4 sw=4 expandtab: */