diff options
Diffstat (limited to 'sway/desktop/layer_shell.c')
-rw-r--r-- | sway/desktop/layer_shell.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/sway/desktop/layer_shell.c b/sway/desktop/layer_shell.c index a4f7f928..7d254173 100644 --- a/sway/desktop/layer_shell.c +++ b/sway/desktop/layer_shell.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include "sway/output.h" | 14 | #include "sway/output.h" |
15 | #include "sway/server.h" | 15 | #include "sway/server.h" |
16 | #include "sway/tree/arrange.h" | 16 | #include "sway/tree/arrange.h" |
17 | #include "sway/tree/workspace.h" | ||
17 | #include "log.h" | 18 | #include "log.h" |
18 | 19 | ||
19 | static void apply_exclusive(struct wlr_box *usable_area, | 20 | static void apply_exclusive(struct wlr_box *usable_area, |
@@ -176,7 +177,7 @@ void arrange_layers(struct sway_output *output) { | |||
176 | sizeof(struct wlr_box)) != 0) { | 177 | sizeof(struct wlr_box)) != 0) { |
177 | wlr_log(WLR_DEBUG, "Usable area changed, rearranging output"); | 178 | wlr_log(WLR_DEBUG, "Usable area changed, rearranging output"); |
178 | memcpy(&output->usable_area, &usable_area, sizeof(struct wlr_box)); | 179 | memcpy(&output->usable_area, &usable_area, sizeof(struct wlr_box)); |
179 | arrange_output(output->swayc); | 180 | arrange_output(output); |
180 | } | 181 | } |
181 | 182 | ||
182 | // Arrange non-exlusive surfaces from top->bottom | 183 | // Arrange non-exlusive surfaces from top->bottom |
@@ -256,7 +257,7 @@ static void unmap(struct sway_layer_surface *sway_layer) { | |||
256 | return; | 257 | return; |
257 | } | 258 | } |
258 | struct sway_output *output = wlr_output->data; | 259 | struct sway_output *output = wlr_output->data; |
259 | if (output == NULL || output->swayc == NULL) { | 260 | if (output == NULL) { |
260 | return; | 261 | return; |
261 | } | 262 | } |
262 | output_damage_surface(output, sway_layer->geo.x, sway_layer->geo.y, | 263 | output_damage_surface(output, sway_layer->geo.x, sway_layer->geo.y, |
@@ -283,9 +284,9 @@ static void handle_destroy(struct wl_listener *listener, void *data) { | |||
283 | wl_list_remove(&sway_layer->surface_commit.link); | 284 | wl_list_remove(&sway_layer->surface_commit.link); |
284 | if (sway_layer->layer_surface->output != NULL) { | 285 | if (sway_layer->layer_surface->output != NULL) { |
285 | struct sway_output *output = sway_layer->layer_surface->output->data; | 286 | struct sway_output *output = sway_layer->layer_surface->output->data; |
286 | if (output != NULL && output->swayc != NULL) { | 287 | if (output != NULL) { |
287 | arrange_layers(output); | 288 | arrange_layers(output); |
288 | arrange_windows(output->swayc); | 289 | arrange_output(output); |
289 | transaction_commit_dirty(); | 290 | transaction_commit_dirty(); |
290 | } | 291 | } |
291 | wl_list_remove(&sway_layer->output_destroy.link); | 292 | wl_list_remove(&sway_layer->output_destroy.link); |
@@ -332,23 +333,21 @@ void handle_layer_shell_surface(struct wl_listener *listener, void *data) { | |||
332 | 333 | ||
333 | if (!layer_surface->output) { | 334 | if (!layer_surface->output) { |
334 | // Assign last active output | 335 | // Assign last active output |
335 | struct sway_container *output = NULL; | 336 | struct sway_output *output = NULL; |
336 | struct sway_seat *seat = input_manager_get_default_seat(input_manager); | 337 | struct sway_seat *seat = input_manager_get_default_seat(input_manager); |
337 | if (seat) { | 338 | if (seat) { |
338 | output = seat_get_focus_inactive(seat, &root_container); | 339 | struct sway_workspace *ws = seat_get_focused_workspace(seat); |
340 | output = ws->output; | ||
339 | } | 341 | } |
340 | if (!output) { | 342 | if (!output) { |
341 | if (!sway_assert(root_container.children->length, | 343 | if (!sway_assert(root->outputs->length, |
342 | "cannot auto-assign output for layer")) { | 344 | "cannot auto-assign output for layer")) { |
343 | wlr_layer_surface_close(layer_surface); | 345 | wlr_layer_surface_close(layer_surface); |
344 | return; | 346 | return; |
345 | } | 347 | } |
346 | output = root_container.children->items[0]; | 348 | output = root->outputs->items[0]; |
347 | } | 349 | } |
348 | if (output->type != C_OUTPUT) { | 350 | layer_surface->output = output->wlr_output; |
349 | output = container_parent(output, C_OUTPUT); | ||
350 | } | ||
351 | layer_surface->output = output->sway_output->wlr_output; | ||
352 | } | 351 | } |
353 | 352 | ||
354 | struct sway_layer_surface *sway_layer = | 353 | struct sway_layer_surface *sway_layer = |