Skip to content

RFC: Alternative way to implement xdg popup grabs

Vlad Zahorodnii requested to merge work/seat-clutter into master

Disclaimer: I wrote this MR in hurry on Saturday to get something working, some code may not be pretty

With the current architecture, it's a little bit hard to implement xdg popup grabs that behave as expected.

The goal of this merge request is to implement xdg popup grabs solely in kwayland-server that adhere to the spec. In order to achieve that, an input device grab infrastructure has been introduced - KeyboardGrab, TouchGrab, and PointerGrab. An input device grab is responsible for dispatching input events to the currently focused client as well as choosing the effective focused surface.

An xdg popup grab encapsulates the keyboard grab, the touch grab, and the pointer grab. The new grab infrastructure allows implementing other kinds of grabs, for example, input method grabs.

The order of input event filters needs to be changed in kwin, for example the decoration input filter must be moved after the forward input event filter, which is sensible because decorations are rendered below surfaces. The compositor may also need to know whether the input event has been accepted by the seat. At the moment, this minor detail is left out of this MR, but in general, we probably need to pass an event object that has an "accepted" property to SeatInterface.

This mr contains some input related fixes and ports pointerinterface and touchinterface to the new approach, those changes will be split out in separate merge requests.

Merge request reports