aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dwyer <ryandwyer1@gmail.com>2018-10-23 00:02:08 +1000
committerRyan Dwyer <ryandwyer1@gmail.com>2018-10-23 00:02:08 +1000
commit662466e8db773926bf61b21280194a3540ae26ec (patch)
tree6d86a12b8abf8b290b845576e94021d611390898
parentcdbfc3338bcaef113ef013a8234ad668eea22a3c (diff)
Fix crash when resizing container hidden in the scratchpad
Firstly, the container was wrongly identifying as a tiling container because it had no workspace. Secondly, when calculating the maximum possible size we can't use the workspace if it's not there, so we'll allow unlimited size in this case.
-rw-r--r--sway/commands/resize.c4
-rw-r--r--sway/tree/container.c10
2 files changed, 10 insertions, 4 deletions
diff --git a/sway/commands/resize.c b/sway/commands/resize.c
index 6de14ca3..8666f40b 100644
--- a/sway/commands/resize.c
+++ b/sway/commands/resize.c
@@ -94,7 +94,7 @@ static void calculate_constraints(int *min_width, int *max_width,
*min_height = config->floating_minimum_height;
}
- if (config->floating_maximum_width == -1) { // no maximum
+ if (config->floating_maximum_width == -1 || !con->workspace) { // no max
*max_width = INT_MAX;
} else if (config->floating_maximum_width == 0) { // automatic
*max_width = con->workspace->width;
@@ -102,7 +102,7 @@ static void calculate_constraints(int *min_width, int *max_width,
*max_width = config->floating_maximum_width;
}
- if (config->floating_maximum_height == -1) { // no maximum
+ if (config->floating_maximum_height == -1 || !con->workspace) { // no max
*max_height = INT_MAX;
} else if (config->floating_maximum_height == 0) { // automatic
*max_height = con->workspace->height;
diff --git a/sway/tree/container.c b/sway/tree/container.c
index b41e8dd4..58d3df34 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -727,8 +727,14 @@ void container_set_geometry_from_floating_view(struct sway_container *con) {
}
bool container_is_floating(struct sway_container *container) {
- return !container->parent && container->workspace &&
- list_find(container->workspace->floating, container) != -1;
+ if (!container->parent && container->workspace &&
+ list_find(container->workspace->floating, container) != -1) {
+ return true;
+ }
+ if (container->scratchpad) {
+ return true;
+ }
+ return false;
}
void container_get_box(struct sway_container *container, struct wlr_box *box) {