aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/root.c
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2019-03-27 14:00:19 -0400
committerLibravatar emersion <contact@emersion.fr>2019-03-31 09:32:23 +0300
commitdd28e6a6d6abf06d2d16e6c91aeaf942bf225af7 (patch)
tree98d0836c238f9e49b25e65de7c6645813dfe1ad6 /sway/tree/root.c
parentFix a crash in swaybar when an icon dir is not readable (diff)
downloadsway-dd28e6a6d6abf06d2d16e6c91aeaf942bf225af7.tar.gz
sway-dd28e6a6d6abf06d2d16e6c91aeaf942bf225af7.tar.zst
sway-dd28e6a6d6abf06d2d16e6c91aeaf942bf225af7.zip
Fix xwayland configure request scratchpad crash
This fixes a crash in `container_init_floating` when a xwayland view sends a configure request while in the scratchpad. `container_init_floating` gets called so the configured minimum and maximum sizes gets respected when resizing to the requested size. Since the workspace was NULL, it would SIGSEGV when attempting to get the workspace's output for the output box retrieval. This extracts the resizing portion of `container_init_floating` into a separate function. If the container is in the scratchpad, it will just be resized and skip the centering. Additionally, `container_init_floating` has been renamed to `container_floating_resize_and_center` to more accurately describe what it does.
Diffstat (limited to 'sway/tree/root.c')
-rw-r--r--sway/tree/root.c10
1 files changed, 1 insertions, 9 deletions
diff --git a/sway/tree/root.c b/sway/tree/root.c
index 5dde9f22..bc9c610d 100644
--- a/sway/tree/root.c
+++ b/sway/tree/root.c
@@ -124,15 +124,7 @@ void root_scratchpad_show(struct sway_container *con) {
124 struct wlr_box workspace_box; 124 struct wlr_box workspace_box;
125 workspace_get_box(new_ws, &workspace_box); 125 workspace_get_box(new_ws, &workspace_box);
126 if (!wlr_box_contains_point(&workspace_box, center_lx, center_ly)) { 126 if (!wlr_box_contains_point(&workspace_box, center_lx, center_ly)) {
127 // Maybe resize it 127 container_floating_resize_and_center(con);
128 if (con->width > new_ws->width || con->height > new_ws->height) {
129 container_init_floating(con);
130 }
131
132 // Center it
133 double new_lx = new_ws->x + (new_ws->width - con->width) / 2;
134 double new_ly = new_ws->y + (new_ws->height - con->height) / 2;
135 container_floating_move_to(con, new_lx, new_ly);
136 } 128 }
137 129
138 arrange_workspace(new_ws); 130 arrange_workspace(new_ws);