mirror of
https://github.com/swaywm/sway.git
synced 2026-06-13 14:33:19 -04:00
Add support for wlr-output-power-management-v1 brightness
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5384
This commit is contained in:
parent
f1b40bc288
commit
c2797d0d9b
4 changed files with 25 additions and 0 deletions
|
|
@ -72,6 +72,9 @@ struct sway_output {
|
||||||
|
|
||||||
bool allow_tearing;
|
bool allow_tearing;
|
||||||
bool hdr;
|
bool hdr;
|
||||||
|
|
||||||
|
bool brightness_changed;
|
||||||
|
float brightness;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sway_output_non_desktop {
|
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 handle_output_power_manager_set_mode(struct wl_listener *listener,
|
||||||
void *data);
|
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);
|
struct sway_output_non_desktop *output_non_desktop_create(struct wlr_output *wlr_output);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ struct sway_server {
|
||||||
|
|
||||||
struct wlr_output_power_manager_v1 *output_power_manager_v1;
|
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_mode;
|
||||||
|
struct wl_listener output_power_manager_set_brightness;
|
||||||
struct wlr_input_method_manager_v2 *input_method;
|
struct wlr_input_method_manager_v2 *input_method;
|
||||||
struct wlr_text_input_manager_v3 *text_input;
|
struct wlr_text_input_manager_v3 *text_input;
|
||||||
struct wlr_ext_foreign_toplevel_list_v1 *foreign_toplevel_list;
|
struct wlr_ext_foreign_toplevel_list_v1 *foreign_toplevel_list;
|
||||||
|
|
|
||||||
|
|
@ -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)) {
|
if (!wlr_output_commit_state(output->wlr_output, &pending)) {
|
||||||
sway_log(SWAY_ERROR, "Page-flip failed on output %s", output->wlr_output->name);
|
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);
|
store_output_config(oc);
|
||||||
request_modeset();
|
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);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -456,6 +456,10 @@ bool server_init(struct sway_server *server) {
|
||||||
handle_output_power_manager_set_mode;
|
handle_output_power_manager_set_mode;
|
||||||
wl_signal_add(&server->output_power_manager_v1->events.set_mode,
|
wl_signal_add(&server->output_power_manager_v1->events.set_mode,
|
||||||
&server->output_power_manager_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);
|
server->input_method = wlr_input_method_manager_v2_create(server->wl_display);
|
||||||
if (!server->input_method) {
|
if (!server->input_method) {
|
||||||
sway_log(SWAY_ERROR, "Failed to create input method manager");
|
sway_log(SWAY_ERROR, "Failed to create input method manager");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue