diff --git a/libweston/compositor.c b/libweston/compositor.c index 3f5d09664..4817adb28 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -1077,6 +1077,26 @@ notify_surface_protection_change(void *data) weston_surface_compute_protection(psurface); } +/** + * \param compositor weston_compositor + * + * Schedule an idle task to notify surface about the update in protection, + * if not already scheduled. + */ +static void +weston_schedule_surface_protection_update(struct weston_compositor *compositor) +{ + struct content_protection *cp = compositor->content_protection; + struct wl_event_loop *loop; + + if (!cp || cp->surface_protection_update) + return; + loop = wl_display_get_event_loop(compositor->wl_display); + cp->surface_protection_update = wl_event_loop_add_idle(loop, + notify_surface_protection_change, + compositor); +} + /** * \param es The surface * \param mask The new set of outputs for the surface @@ -1095,8 +1115,6 @@ weston_surface_update_output_mask(struct weston_surface *es, uint32_t mask) uint32_t output_bit; struct weston_output *output; struct weston_head *head; - struct content_protection *cp; - struct wl_event_loop *loop; es->output_mask = mask; if (es->resource == NULL) @@ -1119,13 +1137,7 @@ weston_surface_update_output_mask(struct weston_surface *es, uint32_t mask) * Change in surfaces' output mask might trigger a change in its * protection. */ - loop = wl_display_get_event_loop(es->compositor->wl_display); - cp = es->compositor->content_protection; - if (!cp || cp->surface_protection_update) - return; - cp->surface_protection_update = wl_event_loop_add_idle(loop, - notify_surface_protection_change, - es->compositor); + weston_schedule_surface_protection_update(es->compositor); } static void @@ -5402,10 +5414,6 @@ weston_output_compute_protection(struct weston_output *output) enum weston_hdcp_protection op_protection; bool op_protection_valid = false; struct weston_compositor *wc = output->compositor; - struct content_protection *cp = wc->content_protection; - - if (!cp) - return; wl_list_for_each(head, &output->head_list, output_link) { if (!op_protection_valid) { @@ -5420,16 +5428,9 @@ weston_output_compute_protection(struct weston_output *output) op_protection = WESTON_HDCP_DISABLE; if (output->current_protection != op_protection) { - struct wl_event_loop *loop; - output->current_protection = op_protection; weston_output_damage(output); - if (cp->surface_protection_update) - return; - loop = wl_display_get_event_loop(wc->wl_display); - cp->surface_protection_update = wl_event_loop_add_idle(loop, - notify_surface_protection_change, - wc); + weston_schedule_surface_protection_update(wc); } }