Losing keyboard focus doesn't automatically mean you lose mouse capture
Fixes https://github.com/libsdl-org/SDL/issues/5616
This commit is contained in:
parent
2a58e7b11c
commit
5322b3528a
3 changed files with 0 additions and 24 deletions
|
@ -283,23 +283,6 @@ int SDL_SetKeyboardFocus(SDL_Window *window)
|
||||||
|
|
||||||
/* See if the current window has lost focus */
|
/* See if the current window has lost focus */
|
||||||
if (keyboard->focus && keyboard->focus != window) {
|
if (keyboard->focus && keyboard->focus != window) {
|
||||||
|
|
||||||
/* new window shouldn't think it has mouse captured. */
|
|
||||||
SDL_assert(window == NULL || !(window->flags & SDL_WINDOW_MOUSE_CAPTURE));
|
|
||||||
|
|
||||||
/* old window must lose an existing mouse capture. */
|
|
||||||
if (keyboard->focus->flags & SDL_WINDOW_MOUSE_CAPTURE) {
|
|
||||||
SDL_Mouse *mouse = SDL_GetMouse();
|
|
||||||
|
|
||||||
if (mouse->CaptureMouse) {
|
|
||||||
SDL_CaptureMouse(SDL_FALSE); /* drop the capture. */
|
|
||||||
SDL_UpdateMouseCapture(SDL_TRUE);
|
|
||||||
SDL_assert(!(keyboard->focus->flags & SDL_WINDOW_MOUSE_CAPTURE));
|
|
||||||
} else {
|
|
||||||
keyboard->focus->flags &= ~SDL_WINDOW_MOUSE_CAPTURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_SendWindowEvent(keyboard->focus, SDL_EVENT_WINDOW_FOCUS_LOST, 0, 0);
|
SDL_SendWindowEvent(keyboard->focus, SDL_EVENT_WINDOW_FOCUS_LOST, 0, 0);
|
||||||
|
|
||||||
/* Ensures IME compositions are committed */
|
/* Ensures IME compositions are committed */
|
||||||
|
|
|
@ -1558,7 +1558,6 @@ static void keyboard_handle_leave(void *data, struct wl_keyboard *keyboard,
|
||||||
|
|
||||||
wind->keyboard_device = NULL;
|
wind->keyboard_device = NULL;
|
||||||
window = wind->sdlwindow;
|
window = wind->sdlwindow;
|
||||||
window->flags &= ~SDL_WINDOW_MOUSE_CAPTURE;
|
|
||||||
|
|
||||||
/* Stop key repeat before clearing keyboard focus */
|
/* Stop key repeat before clearing keyboard focus */
|
||||||
keyboard_repeat_clear(&input->keyboard_repeat);
|
keyboard_repeat_clear(&input->keyboard_repeat);
|
||||||
|
|
|
@ -1530,7 +1530,6 @@ static const struct frog_color_managed_surface_listener frog_surface_listener =
|
||||||
|
|
||||||
static void SetKeyboardFocus(SDL_Window *window)
|
static void SetKeyboardFocus(SDL_Window *window)
|
||||||
{
|
{
|
||||||
SDL_Window *kb_focus = SDL_GetKeyboardFocus();
|
|
||||||
SDL_Window *topmost = window;
|
SDL_Window *topmost = window;
|
||||||
|
|
||||||
/* Find the topmost parent */
|
/* Find the topmost parent */
|
||||||
|
@ -1540,11 +1539,6 @@ static void SetKeyboardFocus(SDL_Window *window)
|
||||||
|
|
||||||
topmost->driverdata->keyboard_focus = window;
|
topmost->driverdata->keyboard_focus = window;
|
||||||
|
|
||||||
/* Clear the mouse capture flags before changing keyboard focus */
|
|
||||||
if (kb_focus) {
|
|
||||||
kb_focus->flags &= ~SDL_WINDOW_MOUSE_CAPTURE;
|
|
||||||
}
|
|
||||||
window->flags &= ~SDL_WINDOW_MOUSE_CAPTURE;
|
|
||||||
SDL_SetKeyboardFocus(window);
|
SDL_SetKeyboardFocus(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue