staging: Add surface group transaction protocol

This adds a protocol that aims to make it possible to update multiple
surfaces atomically. An intended use case is to update a xdg_popup
together with its parent, but it can be used for any other reason,
including replacing the synchronization included in the subsurfaces

It works by adding surfaces to a "transaction" object that will, as long
as a surface belongs to it, cache any committed state. To apply all the
cache state atomically, the client calls the wp_transaction_v1.commit
request, causing all the cached state to be applied atomically.

This level of synchronization works on a "lower" level than subsurfaces,
as in, a transaction object will consume the state the subsurface
defines as being applied, caching it until the wp_transaction_v1.commit
request is done.

Signed-off-by: Jonas Ådahl <>
4 jobs for wip/transactions in 59 seconds