From ef9a5b7040b36d9c6b8ab4572eb7b9d6d4190659 Mon Sep 17 00:00:00 2001
From: Frank Praznik <[EMAIL REDACTED]>
Date: Wed, 20 May 2026 11:33:46 -0400
Subject: [PATCH] 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.
---
src/video/x11/SDL_x11xinput2.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/video/x11/SDL_x11xinput2.c b/src/video/x11/SDL_x11xinput2.c
index f2c188474d7d8..bd138d507a034 100644
--- a/src/video/x11/SDL_x11xinput2.c
+++ b/src/video/x11/SDL_x11xinput2.c
@@ -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;
}