mirror of https://github.com/libsdl-org/SDL
X11: Ungrab the keyboard when the mouse leaves the window
GNOME Mutter requires keyboard grab for certain important functionality like window resizing, interaction with the application context menu, and opening the Activites view. To allow Mutter to grab the keyboard as needed, we'll ungrab when the mouse leaves our window. To be safe, we'll do this for all WMs since forks of Mutter and Matacity (and possibly others) may have the same behavior, and we don't want to have to keep track of those.
This commit is contained in:
parent
87f0900701
commit
808249a5ca
|
@ -808,6 +808,9 @@ X11_DispatchEvent(_THIS)
|
|||
if (!mouse->relative_mode) {
|
||||
SDL_SendMouseMotion(data->window, 0, 0, xevent.xcrossing.x, xevent.xcrossing.y);
|
||||
}
|
||||
|
||||
/* We ungrab in LeaveNotify, so we may need to grab again here */
|
||||
SDL_UpdateWindowGrab(data->window);
|
||||
}
|
||||
break;
|
||||
/* Losing mouse coverage? */
|
||||
|
@ -829,6 +832,13 @@ X11_DispatchEvent(_THIS)
|
|||
if (xevent.xcrossing.mode != NotifyGrab &&
|
||||
xevent.xcrossing.mode != NotifyUngrab &&
|
||||
xevent.xcrossing.detail != NotifyInferior) {
|
||||
|
||||
/* In order for interaction with the window decorations and menu to work properly
|
||||
on Mutter, we need to ungrab the keyboard when the the mouse leaves. */
|
||||
if (!(data->window->flags & SDL_WINDOW_FULLSCREEN)) {
|
||||
X11_SetWindowKeyboardGrab(_this, data->window, SDL_FALSE);
|
||||
}
|
||||
|
||||
SDL_SetMouseFocus(NULL);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue