Create a multi-surface state synchronization protocol
While surfaces in a subsurface tree can commit their state together atomically, other surfaces cannot.
A use case where this is important is when repositioning a xdg_popup. In a early version of the xdg-shell popup repositioning protocol, a inter-xdg-surface synchronization method was added, but eventually scrapped in favor of exploring a more plumbing level surface state synchronization framework.
A quick sketch of how it may look:
<?xml version="1.0" encoding="UTF-8"?>
<protocol name="sync">
<interface name="zwp_sync_manager_v1" version="1">
<request name="destroy" type="destructor"/>
<request name="create_sync_point">
<arg name="id" type="new_id" interface="zwp_sync_point_v1"/>
</request>
</interface>
<interface name="zwp_sync_point_v1" version="1">
<request name="destroy" type="destructor"/>
<request name="add_surface">
<arg name="id" type="object" interface="wl_surface"/>
</request>
<request name="commit"/>
</interface>
</protocol>