presentation_feedback: add the sampled state

This commit is contained in:
Ivan Molodetskikh 2019-08-17 21:57:47 -07:00 committed by Simon Ser
parent c808613287
commit 020a33e057
2 changed files with 26 additions and 4 deletions

View file

@ -61,8 +61,10 @@ static void feedback_handle_surface_commit(struct wl_listener *listener,
wl_container_of(listener, feedback, surface_commit);
if (feedback->committed) {
// The content update has been superseded
feedback_send_discarded(feedback);
if (!feedback->sampled) {
// The content update has been superseded
feedback_send_discarded(feedback);
}
} else {
feedback->committed = true;
}
@ -216,8 +218,20 @@ void wlr_presentation_send_surface_presented(
struct wlr_presentation_feedback *feedback, *feedback_tmp;
wl_list_for_each_safe(feedback, feedback_tmp,
&presentation->feedbacks, link) {
if (feedback->surface == surface && feedback->committed) {
if (feedback->surface == surface && feedback->sampled) {
feedback_send_presented(feedback, event);
}
}
}
void wlr_presentation_surface_sampled(
struct wlr_presentation *presentation, struct wlr_surface *surface) {
// TODO: maybe use a hashtable to optimize this function
struct wlr_presentation_feedback *feedback, *feedback_tmp;
wl_list_for_each_safe(feedback, feedback_tmp,
&presentation->feedbacks, link) {
if (feedback->surface == surface && feedback->committed) {
feedback->sampled = true;
}
}
}