summaryrefslogtreecommitdiffstats
path: root/sway/desktop/layer_shell.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/desktop/layer_shell.c')
-rw-r--r--sway/desktop/layer_shell.c23
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
19static void apply_exclusive(struct wlr_box *usable_area, 20static 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 =