cage: add support for wlr-output-power-management

This implements the zwlr_output_power_management_v1 protocol, which
allow clients such as swayidle to toggle display power state. Outputs
are intentionally not removed per the discussion in #245.

A dpms_powered_off flag is tracked on each output to prevent a DPMS "on"
request from re-enabling an output that was disabled via wlr-output-management
rather than DPMS.

The protocol generation/dep additions is heavily inspired by swaywm

Fixes #245
This commit is contained in:
Clayton Craft 2026-06-05 09:05:21 -07:00
parent 79e1e0dfaa
commit 7e44e3c832
No known key found for this signature in database
GPG key ID: B14FABC9971C467A
7 changed files with 199 additions and 1 deletions

10
cage.c
View file

@ -518,6 +518,15 @@ main(int argc, char *argv[])
server.output_manager_test.notify = handle_output_manager_test;
wl_signal_add(&server.output_manager_v1->events.test, &server.output_manager_test);
server.output_power_manager_v1 = wlr_output_power_manager_v1_create(server.wl_display);
if (!server.output_power_manager_v1) {
wlr_log(WLR_ERROR, "Unable to create the output power manager");
ret = 1;
goto end;
}
server.output_power_manager_set_mode.notify = handle_output_power_manager_set_mode;
wl_signal_add(&server.output_power_manager_v1->events.set_mode, &server.output_power_manager_set_mode);
#if WLR_HAS_DRM_BACKEND
server.drm_lease_v1 = wlr_drm_lease_v1_manager_create(server.wl_display, server.backend);
if (server.drm_lease_v1) {
@ -662,6 +671,7 @@ main(int argc, char *argv[])
wl_list_remove(&server.new_idle_inhibitor_v1.link);
wl_list_remove(&server.new_output.link);
wl_list_remove(&server.output_layout_change.link);
wl_list_remove(&server.output_power_manager_set_mode.link);
end:
if (pid != 0)