diff options
author | Alex Maese <memaese@hotmail.com> | 2022-06-09 18:27:24 -0500 |
---|---|---|
committer | Simon Zeni <simon@bl4ckb0ne.ca> | 2022-09-19 07:26:45 -0400 |
commit | c015db4a9f115bfa10bd0b4c3fa05aca51b04c9b (patch) | |
tree | 0581ccd8c3639a20df1397b8c7e2dab6881a3289 /sway | |
parent | 1c368fbb5fcd8fb67040bcc12bd71c7fbf119e97 (diff) |
sway: Add non-desktop-output type
Currently, when encountering a non-desktop display, sway offers the
output for leasing and returns without storing it in a sway specific
output type like `struct sway_output`. Additionally, running
`swaymsg -t get_outputs` doesn't show non-desktop outputs.
This commit stores the non-desktop outputs into a struct called
`sway_output_non_desktop`, and adds them to a list on `sway_root`
Diffstat (limited to 'sway')
-rw-r--r-- | sway/desktop/output.c | 2 | ||||
-rw-r--r-- | sway/tree/output.c | 28 | ||||
-rw-r--r-- | sway/tree/root.c | 1 |
3 files changed, 31 insertions, 0 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 7bb9dab2..3f3f9494 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -883,10 +883,12 @@ void handle_new_output(struct wl_listener *listener, void *data) { if (wlr_output->non_desktop) { sway_log(SWAY_DEBUG, "Not configuring non-desktop output"); + struct sway_output_non_desktop *non_desktop = output_non_desktop_create(wlr_output); if (server->drm_lease_manager) { wlr_drm_lease_v1_manager_offer_output(server->drm_lease_manager, wlr_output); } + list_add(root->non_desktop_outputs, non_desktop); return; } diff --git a/sway/tree/output.c b/sway/tree/output.c index 52826c91..b30e646e 100644 --- a/sway/tree/output.c +++ b/sway/tree/output.c @@ -9,6 +9,7 @@ #include "sway/output.h" #include "sway/tree/arrange.h" #include "sway/tree/workspace.h" +#include "sway/server.h" #include "log.h" #include "util.h" @@ -390,6 +391,33 @@ void output_get_box(struct sway_output *output, struct wlr_box *box) { box->height = output->height; } +static void handle_destroy_non_desktop(struct wl_listener *listener, void *data) { + struct sway_output_non_desktop *output = + wl_container_of(listener, output, destroy); + + sway_log(SWAY_DEBUG, "Destroying non-desktop output '%s'", output->wlr_output->name); + + int index = list_find(root->non_desktop_outputs, output); + list_del(root->non_desktop_outputs, index); + + wl_list_remove(&output->destroy.link); + + free(output); +} + +struct sway_output_non_desktop *output_non_desktop_create( + struct wlr_output *wlr_output) { + struct sway_output_non_desktop *output = + calloc(1, sizeof(struct sway_output_non_desktop)); + + output->wlr_output = wlr_output; + + wl_signal_add(&wlr_output->events.destroy, &output->destroy); + output->destroy.notify = handle_destroy_non_desktop; + + return output; +} + enum sway_container_layout output_get_default_layout( struct sway_output *output) { if (config->default_orientation != L_NONE) { diff --git a/sway/tree/root.c b/sway/tree/root.c index 8508e9eb..7df0b237 100644 --- a/sway/tree/root.c +++ b/sway/tree/root.c @@ -38,6 +38,7 @@ struct sway_root *root_create(void) { wl_list_init(&root->drag_icons); wl_signal_init(&root->events.new_node); root->outputs = create_list(); + root->non_desktop_outputs = create_list(); root->scratchpad = create_list(); root->output_layout_change.notify = output_layout_handle_change; |