Просмотр исходного кода

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 23 часов назад
Родитель
Сommit
b94ffff046
1 измененных файлов с 4 добавлено и 2 удалено
  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;
 
             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;
                 }