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

wayland: Remove focus references when a pointer capture ends on a subsurface

The core mouse code will unfocus the window when a capture ends outside the window boundaries, but the backend still needs to update the internal focus references.
Frank Praznik 1 неделя назад
Родитель
Сommit
0a96d47599
1 измененных файлов с 5 добавлено и 0 удалено
  1. 5 0
      src/video/wayland/SDL_waylandevents.c

+ 5 - 0
src/video/wayland/SDL_waylandevents.c

@@ -1048,6 +1048,11 @@ static void pointer_dispatch_button(SDL_WaylandSeat *seat, Uint8 sdl_button, boo
                 window->sdlwindow->flags |= SDL_WINDOW_MOUSE_CAPTURE;
             } else {
                 window->sdlwindow->flags &= ~SDL_WINDOW_MOUSE_CAPTURE;
+
+                // If ending the capture on a subsurface, dispatch a leave event to remove focus.
+                if (seat->pointer.focus_surface != window->surface) {
+                    seat->pointer.pending_frame.leave_surface = window->surface;
+                }
             }
         }