add role-committed hook

This commit is contained in:
Tony Crisci 2017-12-27 06:06:29 -05:00
parent 4d744aeb23
commit 5a18f62fee
2 changed files with 23 additions and 0 deletions

View File

@ -77,6 +77,10 @@ struct wlr_surface {
struct wl_listener compositor_listener; struct wl_listener compositor_listener;
void *compositor_data; void *compositor_data;
// surface commit callback for the role that runs before all others
void (*role_committed)(struct wlr_surface *surface, void *role_data);
void *role_data;
// subsurface properties // subsurface properties
struct wlr_subsurface *subsurface; struct wlr_subsurface *subsurface;
struct wl_list subsurface_list; // wlr_subsurface::parent_link struct wl_list subsurface_list; // wlr_subsurface::parent_link
@ -146,4 +150,12 @@ void wlr_surface_send_leave(struct wlr_surface *surface,
void wlr_surface_send_frame_done(struct wlr_surface *surface, void wlr_surface_send_frame_done(struct wlr_surface *surface,
const struct timespec *when); const struct timespec *when);
/**
* Set a callback for surface commit that runs before all the other callbacks.
* This is intended for use by the surface role.
*/
void wlr_surface_set_role_committed(struct wlr_surface *surface,
void (*role_committed)(struct wlr_surface *surface, void *role_data),
void *role_data);
#endif #endif

View File

@ -428,6 +428,10 @@ static void wlr_surface_commit_pending(struct wlr_surface *surface) {
} }
} }
if (surface->role_committed) {
surface->role_committed(surface, surface->role_data);
}
// TODO: add the invalid bitfield to this callback // TODO: add the invalid bitfield to this callback
wl_signal_emit(&surface->events.commit, surface); wl_signal_emit(&surface->events.commit, surface);
} }
@ -943,3 +947,10 @@ void wlr_surface_send_frame_done(struct wlr_surface *surface,
wl_resource_destroy(cb->resource); wl_resource_destroy(cb->resource);
} }
} }
void wlr_surface_set_role_committed(struct wlr_surface *surface,
void (*role_committed)(struct wlr_surface *surface, void *role_data),
void *role_data) {
surface->role_committed = role_committed;
surface->role_data = role_data;
}