Pārlūkot izejas kodu

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.

(cherry picked from commit ef9a5b7040b36d9c6b8ab4572eb7b9d6d4190659)
Frank Praznik 1 dienu atpakaļ
vecāks
revīzija
b94ffff046
1 mainītis faili ar 4 papildinājumiem un 2 dzēšanām
  1. 4 2
      src/video/x11/SDL_x11xinput2.c

+ 4 - 2
src/video/x11/SDL_x11xinput2.c

@@ -611,8 +611,10 @@ void X11_HandleXinput2Event(SDL_VideoDevice *_this, XGenericEventCookie *cookie)
             int x_ticks = 0, y_ticks = 0;
             int x_ticks = 0, y_ticks = 0;
 
 
             if (xev->deviceid != videodata->xinput_master_pointer_device) {
             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;
                     break;
                 }
                 }