Add support for wlr-output-power-management-v1 brightness

References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5384
This commit is contained in:
Simon Ser 2026-05-29 16:58:32 +02:00
parent f1b40bc288
commit c2797d0d9b
4 changed files with 25 additions and 0 deletions

View file

@ -72,6 +72,9 @@ struct sway_output {
bool allow_tearing;
bool hdr;
bool brightness_changed;
float brightness;
};
struct sway_output_non_desktop {
@ -145,6 +148,8 @@ void handle_output_manager_test(struct wl_listener *listener, void *data);
void handle_output_power_manager_set_mode(struct wl_listener *listener,
void *data);
void handle_output_power_manager_set_brightness(struct wl_listener *listener,
void *data);
struct sway_output_non_desktop *output_non_desktop_create(struct wlr_output *wlr_output);

View file

@ -100,6 +100,7 @@ struct sway_server {
struct wlr_output_power_manager_v1 *output_power_manager_v1;
struct wl_listener output_power_manager_set_mode;
struct wl_listener output_power_manager_set_brightness;
struct wlr_input_method_manager_v2 *input_method;
struct wlr_text_input_manager_v3 *text_input;
struct wlr_ext_foreign_toplevel_list_v1 *foreign_toplevel_list;

View file

@ -303,6 +303,11 @@ static int output_repaint_timer_handler(void *data) {
}
}
if (output->brightness_changed) {
wlr_output_state_set_brightness(&pending, output->brightness);
output->brightness_changed = false;
}
if (!wlr_output_commit_state(output->wlr_output, &pending)) {
sway_log(SWAY_ERROR, "Page-flip failed on output %s", output->wlr_output->name);
}
@ -725,3 +730,13 @@ void handle_output_power_manager_set_mode(struct wl_listener *listener,
store_output_config(oc);
request_modeset();
}
void handle_output_power_manager_set_brightness(struct wl_listener *listener,
void *data) {
struct wlr_output_power_v1_set_brightness_event *event = data;
struct sway_output *output = event->output->data;
output->brightness_changed = true;
output->brightness = event->value;
wlr_output_schedule_frame(output->wlr_output);
}

View file

@ -456,6 +456,10 @@ bool server_init(struct sway_server *server) {
handle_output_power_manager_set_mode;
wl_signal_add(&server->output_power_manager_v1->events.set_mode,
&server->output_power_manager_set_mode);
server->output_power_manager_set_brightness.notify =
handle_output_power_manager_set_brightness;
wl_signal_add(&server->output_power_manager_v1->events.set_brightness,
&server->output_power_manager_set_brightness);
server->input_method = wlr_input_method_manager_v2_create(server->wl_display);
if (!server->input_method) {
sway_log(SWAY_ERROR, "Failed to create input method manager");