mirror of
https://github.com/brl/mutter.git
synced 2025-02-09 01:54:10 +00:00
![Carlos Garnacho](/assets/img/avatar_default.png)
MetaWaylandInput is an object that will become in charge of handling input events on their way to the Wayland socket. It keeps a stack of event handlers, and propagates events and changes across them in order to have them emit Wayland events, or change focus. Each of these event handlers has a MetaWaylandEventInterface, this is a vtable meant to replace MetaWaylandPointerGrabInterface and MetaWaylandKeyboardGrabInterface in an unified manner, with the following methods: - get_focus_surface: to return the focus surface for a device/sequence. Since several handlers will want to delegate logic on previous handlers, it is optional to chain up with meta_wayland_event_handler_chain_up_get_focus_surface(). - focus: To trigger a focus change for a device/sequence, since event handlers are daisy chained by default, it is mandatory to chain up with meta_wayland_event_handler_chain_up_focus(), either with the given surface, or passing NULL to let later handlers unset their state. - press/motion/release: Unified handlers for pointer/touch/stylus input, they chain up like event handlers do. - key: Key event handler, propagates like event handlers do. - other: Fallthrough for other events (pad, scroll, ...), propagates like event handlers do. Since there is a variety of expected behaviors, and the possibility of stacking for some of the existing Wayland "grabs", this provides the mechanism for that to happen. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3420>