surface: introduce commit sequence numbers
Very similar to output commit sequence numbers. Can be useful to reference a specific commit.
This commit is contained in:
parent
78d21fa131
commit
7ac76aba8a
|
@ -31,6 +31,9 @@ enum wlr_surface_state_field {
|
||||||
|
|
||||||
struct wlr_surface_state {
|
struct wlr_surface_state {
|
||||||
uint32_t committed; // enum wlr_surface_state_field
|
uint32_t committed; // enum wlr_surface_state_field
|
||||||
|
// Sequence number of the surface state. Incremented on each commit, may
|
||||||
|
// overflow.
|
||||||
|
uint32_t seq;
|
||||||
|
|
||||||
struct wl_resource *buffer_resource;
|
struct wl_resource *buffer_resource;
|
||||||
int32_t dx, dy; // relative to previous position
|
int32_t dx, dy; // relative to previous position
|
||||||
|
|
|
@ -295,6 +295,7 @@ static void surface_state_copy(struct wlr_surface_state *state,
|
||||||
}
|
}
|
||||||
|
|
||||||
state->committed |= next->committed;
|
state->committed |= next->committed;
|
||||||
|
state->seq = next->seq;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -418,6 +419,7 @@ static void surface_commit_pending(struct wlr_surface *surface) {
|
||||||
|
|
||||||
surface_state_copy(&surface->previous, &surface->current);
|
surface_state_copy(&surface->previous, &surface->current);
|
||||||
surface_state_move(&surface->current, &surface->pending);
|
surface_state_move(&surface->current, &surface->pending);
|
||||||
|
surface->pending.seq = surface->current.seq + 1;
|
||||||
|
|
||||||
if (invalid_buffer) {
|
if (invalid_buffer) {
|
||||||
surface_apply_damage(surface);
|
surface_apply_damage(surface);
|
||||||
|
@ -491,6 +493,7 @@ static void subsurface_commit(struct wlr_subsurface *subsurface) {
|
||||||
if (subsurface_is_synchronized(subsurface)) {
|
if (subsurface_is_synchronized(subsurface)) {
|
||||||
surface_state_move(&subsurface->cached, &surface->pending);
|
surface_state_move(&subsurface->cached, &surface->pending);
|
||||||
subsurface->has_cache = true;
|
subsurface->has_cache = true;
|
||||||
|
surface->pending.seq = subsurface->cached.seq + 1;
|
||||||
} else {
|
} else {
|
||||||
if (subsurface->has_cache) {
|
if (subsurface->has_cache) {
|
||||||
surface_state_move(&surface->pending, &subsurface->cached);
|
surface_state_move(&surface->pending, &subsurface->cached);
|
||||||
|
@ -692,6 +695,7 @@ struct wlr_surface *wlr_surface_create(struct wl_client *client,
|
||||||
surface_state_init(&surface->current);
|
surface_state_init(&surface->current);
|
||||||
surface_state_init(&surface->pending);
|
surface_state_init(&surface->pending);
|
||||||
surface_state_init(&surface->previous);
|
surface_state_init(&surface->previous);
|
||||||
|
surface->pending.seq = 1;
|
||||||
|
|
||||||
wl_signal_init(&surface->events.commit);
|
wl_signal_init(&surface->events.commit);
|
||||||
wl_signal_init(&surface->events.destroy);
|
wl_signal_init(&surface->events.destroy);
|
||||||
|
|
Loading…
Reference in New Issue