Skip to content

Commit

Permalink
X11: Ungrab the keyboard when the mouse leaves the window
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
cgutman committed Feb 10, 2021
1 parent 87f0900 commit 808249a
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/video/x11/SDL_x11events.c
Expand Up @@ -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? */
Expand All @@ -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);
}
}
Expand Down

0 comments on commit 808249a

Please sign in to comment.