]> git.mdlowis.com Git - proto/labwc.git/commitdiff
support wlr-output-power-management
authorbi4k8 <bi4k8@github>
Sun, 6 Mar 2022 04:46:11 +0000 (04:46 +0000)
committerJohan Malm <johanmalm@users.noreply.github.com>
Tue, 8 Mar 2022 20:07:51 +0000 (20:07 +0000)
include/labwc.h
src/output.c
src/server.c

index ee5d72d0014175d8c432b5a23aa184200ddeab2b..43ce6d2d8cdb8b8980acd21b866869080b7e1dfb 100644 (file)
@@ -26,6 +26,7 @@
 #include <wlr/types/wlr_matrix.h>
 #include <wlr/types/wlr_output.h>
 #include <wlr/types/wlr_output_management_v1.h>
+#include <wlr/types/wlr_output_power_management_v1.h>
 #include <wlr/types/wlr_output_layout.h>
 #include <wlr/types/wlr_scene.h>
 #include <wlr/types/wlr_relative_pointer_v1.h>
@@ -176,6 +177,9 @@ struct server {
 
        struct wlr_foreign_toplevel_manager_v1 *foreign_toplevel_manager;
 
+       struct wlr_output_power_manager_v1 *output_power_manager_v1;
+       struct wl_listener output_power_manager_set_mode;
+
        struct wlr_relative_pointer_manager_v1 *relative_pointer_manager;
        struct wlr_pointer_constraints_v1 *constraints;
        struct wl_listener new_constraint;
@@ -489,6 +493,8 @@ struct output *output_from_wlr_output(struct server *server,
        struct wlr_output *wlr_output);
 struct wlr_box output_usable_area_in_layout_coords(struct output *output);
 struct wlr_box output_usable_area_from_cursor_coords(struct server *server);
+void handle_output_power_manager_set_mode(struct wl_listener *listener,
+       void *data);
 
 void server_init(struct server *server);
 void server_start(struct server *server);
index d24f422bbc4b9cc603014d3c01a88327daccc15e..20f7c91655d069e30031a27dc16e2143b398924b 100644 (file)
@@ -9,6 +9,7 @@
 #define _POSIX_C_SOURCE 200809L
 #include "config.h"
 #include <assert.h>
+#include <types/wlr_output.h>
 #include <wlr/types/wlr_buffer.h>
 #include <wlr/types/wlr_xdg_output_v1.h>
 #include <wlr/types/wlr_output_damage.h>
@@ -398,3 +399,21 @@ output_usable_area_from_cursor_coords(struct server *server)
        struct output *output = output_from_wlr_output(server, wlr_output);
        return output_usable_area_in_layout_coords(output);
 }
+
+void
+handle_output_power_manager_set_mode(struct wl_listener *listener, void *data)
+{
+       struct wlr_output_power_v1_set_mode_event *event = data;
+
+       switch (event->mode) {
+       case ZWLR_OUTPUT_POWER_V1_MODE_OFF:
+               wlr_output_enable(event->output, false);
+               wlr_output_commit(event->output);
+               break;
+       case ZWLR_OUTPUT_POWER_V1_MODE_ON:
+               wlr_output_enable(event->output, true);
+               output_ensure_buffer(event->output);
+               wlr_output_commit(event->output);
+               break;
+       }
+}
index a5fd3550fc8eea251baf51a61e835b807ddacb9a..6a713bc69985fb339a9591262f6c42dd979dc418 100644 (file)
@@ -339,6 +339,13 @@ server_init(struct server *server)
        server->foreign_toplevel_manager =
                wlr_foreign_toplevel_manager_v1_create(server->wl_display);
 
+       server->output_power_manager_v1 =
+               wlr_output_power_manager_v1_create(server->wl_display);
+       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);
+
        layers_init(server);
 
 #if HAVE_XWAYLAND