diff --git a/sway/commands/move.c b/sway/commands/move.c index 1a05a7a6..0d0d9727 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c @@ -788,15 +788,15 @@ static struct cmd_results *cmd_move_to_position_pointer( struct wlr_output *output = wlr_output_layout_output_at( root->output_layout, cursor->x, cursor->y); if (output) { - struct wlr_box *box = - wlr_output_layout_get_box(root->output_layout, output); - lx = fmax(lx, box->x); - ly = fmax(ly, box->y); - if (lx + container->pending.width > box->x + box->width) { - lx = box->x + box->width - container->pending.width; + struct wlr_box box; + wlr_output_layout_get_box(root->output_layout, output, &box); + lx = fmax(lx, box.x); + ly = fmax(ly, box.y); + if (lx + container->pending.width > box.x + box.width) { + lx = box.x + box.width - container->pending.width; } - if (ly + container->pending.height > box->y + box->height) { - ly = box->y + box->height - container->pending.height; + if (ly + container->pending.height > box.y + box.height) { + ly = box.y + box.height - container->pending.height; } } diff --git a/sway/config/output.c b/sway/config/output.c index fa509252..88514ac0 100644 --- a/sway/config/output.c +++ b/sway/config/output.c @@ -546,12 +546,12 @@ bool apply_output_config(struct output_config *oc, struct sway_output *output) { } // Update output->{lx, ly, width, height} - struct wlr_box *output_box = - wlr_output_layout_get_box(root->output_layout, wlr_output); - output->lx = output_box->x; - output->ly = output_box->y; - output->width = output_box->width; - output->height = output_box->height; + struct wlr_box output_box; + wlr_output_layout_get_box(root->output_layout, wlr_output, &output_box); + output->lx = output_box.x; + output->ly = output_box.y; + output->width = output_box.width; + output->height = output_box.height; if (!output->enabled) { output_enable(output); diff --git a/sway/desktop/desktop.c b/sway/desktop/desktop.c index ec45d80a..c8d4502c 100644 --- a/sway/desktop/desktop.c +++ b/sway/desktop/desktop.c @@ -6,10 +6,11 @@ void desktop_damage_surface(struct wlr_surface *surface, double lx, double ly, bool whole) { for (int i = 0; i < root->outputs->length; ++i) { struct sway_output *output = root->outputs->items[i]; - struct wlr_box *output_box = wlr_output_layout_get_box( - root->output_layout, output->wlr_output); - output_damage_surface(output, lx - output_box->x, - ly - output_box->y, surface, whole); + struct wlr_box output_box; + wlr_output_layout_get_box(root->output_layout, + output->wlr_output, &output_box); + output_damage_surface(output, lx - output_box.x, + ly - output_box.y, surface, whole); } } diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 852671d2..dd2eaf08 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -737,14 +737,15 @@ static void update_output_manager_config(struct sway_server *server) { } struct wlr_output_configuration_head_v1 *config_head = wlr_output_configuration_head_v1_create(config, output->wlr_output); - struct wlr_box *output_box = wlr_output_layout_get_box( - root->output_layout, output->wlr_output); + struct wlr_box output_box; + wlr_output_layout_get_box(root->output_layout, + output->wlr_output, &output_box); // We mark the output enabled even if it is switched off by DPMS config_head->state.enabled = output->current_mode != NULL && output->enabled; config_head->state.mode = output->current_mode; - if (output_box) { - config_head->state.x = output_box->x; - config_head->state.y = output_box->y; + if (!wlr_box_empty(&output_box)) { + config_head->state.x = output_box.x; + config_head->state.y = output_box.y; } } diff --git a/sway/tree/arrange.c b/sway/tree/arrange.c index 4aa82c35..9c1a11e5 100644 --- a/sway/tree/arrange.c +++ b/sway/tree/arrange.c @@ -311,12 +311,13 @@ void arrange_output(struct sway_output *output) { if (config->reloading) { return; } - const struct wlr_box *output_box = wlr_output_layout_get_box( - root->output_layout, output->wlr_output); - output->lx = output_box->x; - output->ly = output_box->y; - output->width = output_box->width; - output->height = output_box->height; + struct wlr_box output_box; + wlr_output_layout_get_box(root->output_layout, + output->wlr_output, &output_box); + output->lx = output_box.x; + output->ly = output_box.y; + output->width = output_box.width; + output->height = output_box.height; for (int i = 0; i < output->workspaces->length; ++i) { struct sway_workspace *workspace = output->workspaces->items[i]; @@ -328,12 +329,12 @@ void arrange_root(void) { if (config->reloading) { return; } - const struct wlr_box *layout_box = - wlr_output_layout_get_box(root->output_layout, NULL); - root->x = layout_box->x; - root->y = layout_box->y; - root->width = layout_box->width; - root->height = layout_box->height; + struct wlr_box layout_box; + wlr_output_layout_get_box(root->output_layout, NULL, &layout_box); + root->x = layout_box.x; + root->y = layout_box.y; + root->width = layout_box.width; + root->height = layout_box.height; if (root->fullscreen_global) { struct sway_container *fs = root->fullscreen_global; diff --git a/sway/tree/container.c b/sway/tree/container.c index 4756028c..bcac36b1 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -695,12 +695,13 @@ void floating_calculate_constraints(int *min_width, int *max_width, *min_height = config->floating_minimum_height; } - struct wlr_box *box = wlr_output_layout_get_box(root->output_layout, NULL); + struct wlr_box box; + wlr_output_layout_get_box(root->output_layout, NULL, &box); if (config->floating_maximum_width == -1) { // no maximum *max_width = INT_MAX; } else if (config->floating_maximum_width == 0) { // automatic - *max_width = box->width; + *max_width = box.width; } else { *max_width = config->floating_maximum_width; } @@ -708,7 +709,7 @@ void floating_calculate_constraints(int *min_width, int *max_width, if (config->floating_maximum_height == -1) { // no maximum *max_height = INT_MAX; } else if (config->floating_maximum_height == 0) { // automatic - *max_height = box->height; + *max_height = box.height; } else { *max_height = config->floating_maximum_height; } @@ -740,9 +741,9 @@ void container_floating_resize_and_center(struct sway_container *con) { return; } - struct wlr_box *ob = wlr_output_layout_get_box(root->output_layout, - ws->output->wlr_output); - if (!ob) { + struct wlr_box ob; + wlr_output_layout_get_box(root->output_layout, ws->output->wlr_output, &ob); + if (wlr_box_empty(&ob)) { // On NOOP output. Will be called again when moved to an output con->pending.x = 0; con->pending.y = 0; @@ -754,8 +755,8 @@ void container_floating_resize_and_center(struct sway_container *con) { floating_natural_resize(con); if (!con->view) { if (con->pending.width > ws->width || con->pending.height > ws->height) { - con->pending.x = ob->x + (ob->width - con->pending.width) / 2; - con->pending.y = ob->y + (ob->height - con->pending.height) / 2; + con->pending.x = ob.x + (ob.width - con->pending.width) / 2; + con->pending.y = ob.y + (ob.height - con->pending.height) / 2; } else { con->pending.x = ws->x + (ws->width - con->pending.width) / 2; con->pending.y = ws->y + (ws->height - con->pending.height) / 2; @@ -763,8 +764,8 @@ void container_floating_resize_and_center(struct sway_container *con) { } else { if (con->pending.content_width > ws->width || con->pending.content_height > ws->height) { - con->pending.content_x = ob->x + (ob->width - con->pending.content_width) / 2; - con->pending.content_y = ob->y + (ob->height - con->pending.content_height) / 2; + con->pending.content_x = ob.x + (ob.width - con->pending.content_width) / 2; + con->pending.content_y = ob.y + (ob.height - con->pending.content_height) / 2; } else { con->pending.content_x = ws->x + (ws->width - con->pending.content_width) / 2; con->pending.content_y = ws->y + (ws->height - con->pending.content_height) / 2; diff --git a/sway/tree/output.c b/sway/tree/output.c index ad8d2482..52826c91 100644 --- a/sway/tree/output.c +++ b/sway/tree/output.c @@ -301,10 +301,10 @@ struct sway_output *output_get_in_direction(struct sway_output *reference, if (!sway_assert(direction, "got invalid direction: %d", direction)) { return NULL; } - struct wlr_box *output_box = - wlr_output_layout_get_box(root->output_layout, reference->wlr_output); - int lx = output_box->x + output_box->width / 2; - int ly = output_box->y + output_box->height / 2; + struct wlr_box output_box; + wlr_output_layout_get_box(root->output_layout, reference->wlr_output, &output_box); + int lx = output_box.x + output_box.width / 2; + int ly = output_box.y + output_box.height / 2; struct wlr_output *wlr_adjacent = wlr_output_layout_adjacent_output( root->output_layout, direction, reference->wlr_output, lx, ly); if (!wlr_adjacent) {