mirror of
https://github.com/cage-kiosk/cage.git
synced 2026-03-30 11:10:50 -04:00
Merge 25e4d1938b into dcd64ae48b
This commit is contained in:
commit
ff95df0822
4 changed files with 479 additions and 432 deletions
11
cage.c
11
cage.c
|
|
@ -31,6 +31,7 @@
|
||||||
#include <wlr/types/wlr_idle_notify_v1.h>
|
#include <wlr/types/wlr_idle_notify_v1.h>
|
||||||
#include <wlr/types/wlr_output_layout.h>
|
#include <wlr/types/wlr_output_layout.h>
|
||||||
#include <wlr/types/wlr_output_management_v1.h>
|
#include <wlr/types/wlr_output_management_v1.h>
|
||||||
|
#include <wlr/types/wlr_output_power_management_v1.h>
|
||||||
#include <wlr/types/wlr_presentation_time.h>
|
#include <wlr/types/wlr_presentation_time.h>
|
||||||
#include <wlr/types/wlr_primary_selection_v1.h>
|
#include <wlr/types/wlr_primary_selection_v1.h>
|
||||||
#include <wlr/types/wlr_relative_pointer_v1.h>
|
#include <wlr/types/wlr_relative_pointer_v1.h>
|
||||||
|
|
@ -511,6 +512,15 @@ main(int argc, char *argv[])
|
||||||
server.output_manager_test.notify = handle_output_manager_test;
|
server.output_manager_test.notify = handle_output_manager_test;
|
||||||
wl_signal_add(&server.output_manager_v1->events.test, &server.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 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
|
#if WLR_HAS_DRM_BACKEND
|
||||||
server.drm_lease_v1 = wlr_drm_lease_v1_manager_create(server.wl_display, server.backend);
|
server.drm_lease_v1 = wlr_drm_lease_v1_manager_create(server.wl_display, server.backend);
|
||||||
if (server.drm_lease_v1) {
|
if (server.drm_lease_v1) {
|
||||||
|
|
@ -643,6 +653,7 @@ main(int argc, char *argv[])
|
||||||
#endif
|
#endif
|
||||||
wl_list_remove(&server.new_virtual_pointer.link);
|
wl_list_remove(&server.new_virtual_pointer.link);
|
||||||
wl_list_remove(&server.new_virtual_keyboard.link);
|
wl_list_remove(&server.new_virtual_keyboard.link);
|
||||||
|
wl_list_remove(&server.output_power_manager_set_mode.link);
|
||||||
wl_list_remove(&server.output_manager_apply.link);
|
wl_list_remove(&server.output_manager_apply.link);
|
||||||
wl_list_remove(&server.output_manager_test.link);
|
wl_list_remove(&server.output_manager_test.link);
|
||||||
wl_list_remove(&server.xdg_toplevel_decoration.link);
|
wl_list_remove(&server.xdg_toplevel_decoration.link);
|
||||||
|
|
|
||||||
40
output.c
40
output.c
|
|
@ -28,6 +28,7 @@
|
||||||
#include <wlr/types/wlr_output.h>
|
#include <wlr/types/wlr_output.h>
|
||||||
#include <wlr/types/wlr_output_layout.h>
|
#include <wlr/types/wlr_output_layout.h>
|
||||||
#include <wlr/types/wlr_output_management_v1.h>
|
#include <wlr/types/wlr_output_management_v1.h>
|
||||||
|
#include <wlr/types/wlr_output_power_management_v1.h>
|
||||||
#include <wlr/types/wlr_output_swapchain_manager.h>
|
#include <wlr/types/wlr_output_swapchain_manager.h>
|
||||||
#include <wlr/types/wlr_scene.h>
|
#include <wlr/types/wlr_scene.h>
|
||||||
#include <wlr/types/wlr_xdg_shell.h>
|
#include <wlr/types/wlr_xdg_shell.h>
|
||||||
|
|
@ -58,10 +59,15 @@ update_output_manager_config(struct cg_server *server)
|
||||||
wlr_output_configuration_head_v1_create(config, wlr_output);
|
wlr_output_configuration_head_v1_create(config, wlr_output);
|
||||||
struct wlr_box output_box;
|
struct wlr_box output_box;
|
||||||
|
|
||||||
wlr_output_layout_get_box(server->output_layout, wlr_output, &output_box);
|
bool in_layout = wlr_output_layout_get(server->output_layout, wlr_output) != NULL;
|
||||||
if (!wlr_box_empty(&output_box)) {
|
config_head->state.enabled = in_layout;
|
||||||
config_head->state.x = output_box.x;
|
|
||||||
config_head->state.y = output_box.y;
|
if (in_layout) {
|
||||||
|
wlr_output_layout_get_box(server->output_layout, wlr_output, &output_box);
|
||||||
|
if (!wlr_box_empty(&output_box)) {
|
||||||
|
config_head->state.x = output_box.x;
|
||||||
|
config_head->state.y = output_box.y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -430,3 +436,29 @@ handle_output_manager_test(struct wl_listener *listener, void *data)
|
||||||
|
|
||||||
wlr_output_configuration_v1_destroy(config);
|
wlr_output_configuration_v1_destroy(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
handle_output_power_manager_set_mode(struct wl_listener *listener, void *data)
|
||||||
|
{
|
||||||
|
struct cg_server *server = wl_container_of(listener, server, output_power_manager_set_mode);
|
||||||
|
struct wlr_output_power_v1_set_mode_event *event = data;
|
||||||
|
struct cg_output *output = event->output->data;
|
||||||
|
|
||||||
|
if (!output) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct wlr_output_state state = {0};
|
||||||
|
|
||||||
|
switch (event->mode) {
|
||||||
|
case ZWLR_OUTPUT_POWER_V1_MODE_OFF:
|
||||||
|
wlr_output_state_set_enabled(&state, false);
|
||||||
|
break;
|
||||||
|
case ZWLR_OUTPUT_POWER_V1_MODE_ON:
|
||||||
|
wlr_output_state_set_enabled(&state, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
wlr_output_commit_state(event->output, &state);
|
||||||
|
wlr_output_state_finish(&state);
|
||||||
|
}
|
||||||
|
|
|
||||||
1
output.h
1
output.h
|
|
@ -22,6 +22,7 @@ struct cg_output {
|
||||||
|
|
||||||
void handle_output_manager_apply(struct wl_listener *listener, void *data);
|
void handle_output_manager_apply(struct wl_listener *listener, void *data);
|
||||||
void handle_output_manager_test(struct wl_listener *listener, void *data);
|
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_layout_change(struct wl_listener *listener, void *data);
|
void handle_output_layout_change(struct wl_listener *listener, void *data);
|
||||||
void handle_new_output(struct wl_listener *listener, void *data);
|
void handle_new_output(struct wl_listener *listener, void *data);
|
||||||
void output_set_window_title(struct cg_output *output, const char *title);
|
void output_set_window_title(struct cg_output *output, const char *title);
|
||||||
|
|
|
||||||
3
server.h
3
server.h
|
|
@ -61,6 +61,9 @@ struct cg_server {
|
||||||
struct wl_listener output_manager_apply;
|
struct wl_listener output_manager_apply;
|
||||||
struct wl_listener output_manager_test;
|
struct wl_listener output_manager_test;
|
||||||
|
|
||||||
|
struct wlr_output_power_manager_v1 *output_power_manager_v1;
|
||||||
|
struct wl_listener output_power_manager_set_mode;
|
||||||
|
|
||||||
#if WLR_HAS_DRM_BACKEND
|
#if WLR_HAS_DRM_BACKEND
|
||||||
struct wlr_drm_lease_v1_manager *drm_lease_v1;
|
struct wlr_drm_lease_v1_manager *drm_lease_v1;
|
||||||
struct wl_listener drm_lease_request;
|
struct wl_listener drm_lease_request;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue