From 63c0887664975918e4f476f649d4c694d4f503a9 Mon Sep 17 00:00:00 2001 From: Kenny Levinsen Date: Sat, 25 Nov 2023 12:29:57 +0100 Subject: [PATCH] output: Implement request_state event listener wlroots backends no longer change state on their own, and instead send a request_state event. Monitor this event and apply any state we receive. --- output.c | 14 ++++++++++++++ output.h | 1 + 2 files changed, 15 insertions(+) diff --git a/output.c b/output.c index 7ca7bb7..63b812f 100644 --- a/output.c +++ b/output.c @@ -191,6 +191,17 @@ handle_output_commit(struct wl_listener *listener, void *data) } } +static void +handle_output_request_state(struct wl_listener *listener, void *data) +{ + struct cg_output *output = wl_container_of(listener, output, request_state); + struct wlr_output_event_request_state *event = data; + + if (wlr_output_commit_state(output->wlr_output, event->state)) { + update_output_manager_config(output->server); + } +} + void handle_output_layout_change(struct wl_listener *listener, void *data) { @@ -224,6 +235,7 @@ output_destroy(struct cg_output *output) wl_list_remove(&output->destroy.link); wl_list_remove(&output->commit.link); + wl_list_remove(&output->request_state.link); wl_list_remove(&output->frame.link); wl_list_remove(&output->link); @@ -272,6 +284,8 @@ handle_new_output(struct wl_listener *listener, void *data) output->commit.notify = handle_output_commit; wl_signal_add(&wlr_output->events.commit, &output->commit); + output->request_state.notify = handle_output_request_state; + wl_signal_add(&wlr_output->events.request_state, &output->request_state); output->destroy.notify = handle_output_destroy; wl_signal_add(&wlr_output->events.destroy, &output->destroy); output->frame.notify = handle_output_frame; diff --git a/output.h b/output.h index a3a1a4c..fa72545 100644 --- a/output.h +++ b/output.h @@ -13,6 +13,7 @@ struct cg_output { struct wlr_scene_output *scene_output; struct wl_listener commit; + struct wl_listener request_state; struct wl_listener destroy; struct wl_listener frame;