compositor: add wlr_surface_synced commit hook

This commit is contained in:
Kirill Primak 2025-01-07 21:34:00 +03:00 committed by Isaac Freund
parent e3596abc9a
commit c3224d4160
2 changed files with 14 additions and 0 deletions

View file

@ -484,6 +484,8 @@ void wlr_surface_set_preferred_buffer_scale(struct wlr_surface *surface,
void wlr_surface_set_preferred_buffer_transform(struct wlr_surface *surface,
enum wl_output_transform transform);
struct wlr_surface_synced;
/**
* Implementation for struct wlr_surface_synced.
*
@ -500,6 +502,11 @@ struct wlr_surface_synced_impl {
void (*finish_state)(void *state);
// Move a state. If NULL, memcpy() is used.
void (*move_state)(void *dst, void *src);
// Called when the state is committed. If NULL, this is a no-op.
// If an object is a surface role object which has state synchronized with
// the surface state, the role commit hook should be preferred over this.
void (*commit)(struct wlr_surface_synced *synced);
};
/**

View file

@ -552,6 +552,13 @@ static void surface_commit_state(struct wlr_surface *surface,
surface->pending.seq++;
}
struct wlr_surface_synced *synced;
wl_list_for_each(synced, &surface->synced, link) {
if (synced->impl->commit) {
synced->impl->commit(synced);
}
}
if (surface->role != NULL && surface->role->commit != NULL &&
(surface->role_resource != NULL || surface->role->no_object)) {
surface->role->commit(surface);