compositor: add wlr_surface_role.client_commit

This commit is contained in:
Simon Ser 2023-12-10 15:32:23 +01:00
parent d847516765
commit 7e1ae5548c
2 changed files with 14 additions and 0 deletions

View File

@ -81,6 +81,15 @@ struct wlr_surface_role {
* For example, this applies to cursor surfaces.
*/
bool no_object;
/**
* Called when the client sends the wl_surface.commit request. May be NULL.
* Typically used to check that the pending state is valid, and send
* protocol errors if not.
*
* If the role is represented by an object, this is only called if
* such object exists.
*/
void (*client_commit)(struct wlr_surface *surface);
/**
* Called when a new surface state is committed. May be NULL.
*

View File

@ -565,6 +565,11 @@ static void surface_handle_commit(struct wl_client *client,
struct wlr_surface *surface = wlr_surface_from_resource(resource);
surface_finalize_pending(surface);
if (surface->role != NULL && surface->role->client_commit != NULL &&
(surface->role_resource != NULL || surface->role->no_object)) {
surface->role->client_commit(surface);
}
wl_signal_emit_mutable(&surface->events.client_commit, NULL);
if (surface->pending.cached_state_locks > 0 || !wl_list_empty(&surface->cached)) {