x11: Ignore slave button presses when the window lacks keyboard focus

XInput2 can send slave button presses before FocusIn events, which can confuse the click-through suppression logic. A window must have keyboard focus to grab the mouse anyway, so ignore slave presses when lacking keyboard focus.
This commit is contained in:
Frank Praznik
2026-05-20 11:33:46 -04:00
committed by Ryan C. Gordon
parent 8371c09aa7
commit ef9a5b7040

View File

@@ -626,8 +626,10 @@ void X11_HandleXinput2Event(SDL_VideoDevice *_this, XGenericEventCookie *cookie)
int x_ticks = 0, y_ticks = 0;
if (xev->deviceid != videodata->xinput_master_pointer_device) {
// Ignore slave button events on non-focused windows, or focus can be incorrectly set while a grab is active.
if (SDL_GetMouseFocus() != windowdata->window) {
/* Ignore slave button events on non-focused windows, as they can arrive before FocusIn events,
* or result in focus being incorrectly set while a grab is active.
*/
if (SDL_GetMouseFocus() != windowdata->window || SDL_GetKeyboardFocus() != windowdata->window) {
break;
}