diff --git a/libweston/backend-pipewire/pipewire.c b/libweston/backend-pipewire/pipewire.c index 087b3b84d..acc07b32c 100644 --- a/libweston/backend-pipewire/pipewire.c +++ b/libweston/backend-pipewire/pipewire.c @@ -1117,6 +1117,19 @@ pipewire_ensure_matching_mode(struct weston_output *output, struct weston_mode * target->refresh); } +static void +pipewire_set_dpms(struct weston_output *base, enum dpms_enum level) +{ + struct pipewire_output *output = to_pipewire_output(base); + + if (level == WESTON_DPMS_ON) + weston_output_schedule_repaint(base); + else if (output->base.repaint_status == REPAINT_AWAITING_COMPLETION) { + wl_event_source_timer_update(output->finish_frame_timer, 0); + weston_output_schedule_repaint_reset(base); + } +} + static int pipewire_switch_mode(struct weston_output *base, struct weston_mode *target_mode) { @@ -1180,7 +1193,7 @@ pipewire_output_set_size(struct weston_output *base, int width, int height) output->base.repaint = pipewire_output_repaint; output->base.assign_planes = NULL; output->base.set_backlight = NULL; - output->base.set_dpms = NULL; + output->base.set_dpms = pipewire_set_dpms; output->base.switch_mode = pipewire_switch_mode; return 0;