provide an atomic transaction primitive for all surface state in protocol-next
The way surface state propagates through a surface tree is slightly underspecified and not the most intuitive. Furthermore some use cases require committing multiple surface trees atomically (wayland-protocols!26) which further complicates the logic.
For the next version surface commits could be removed. All (non-sub-)surfaces which should be committed together is instead added to a transaction object which, on commit, takes a snapshot of all (pending) state of all surface trees.