Implementation for the various grabs (input methods and xdg_popup e.g)
There's multiple kind of grabs possible,
- Input method grabs (mostly keyboard)
- XDG Popup grabs
IM grabs behave more or less as the first level of filter, where if the input method consumes the event, fine, otherwise the event is forwarded to active client/seat. Input method grabs operate on the wl_keyboard or KeyboardInterface, while XDG popup grab may operate on the surface/subsurface
IM grabs should not change value of the focused*Surface state, while the XDG popup grab may change that state.
xwayland-keyboard-grab-unstable-v1, which operates on the "surface level"