mirror of
https://github.com/swaywm/sway.git
synced 2024-11-14 14:34:07 +01:00
Fix crash in workspace_wrap_children
When workspace_wrap_children is called on a workspace which has a fullscreen child and the fullscreen child is a direct child of the workspace, sway would crash. The workspace's fullscreen pointer is unset when the fullscreen container is detached and applied again when added to a parent, but in this case the parent hadn't yet been added to the workspace which meant con->workspace was NULL. The fix makes container_handle_fullscreen_reparent return if there's no workspace, and the fullscreen pointer is reapplied in workspace_wrap_children.
This commit is contained in:
parent
403905c11b
commit
df95c61044
@ -1063,7 +1063,8 @@ list_t *container_get_current_siblings(struct sway_container *container) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void container_handle_fullscreen_reparent(struct sway_container *con) {
|
void container_handle_fullscreen_reparent(struct sway_container *con) {
|
||||||
if (!con->is_fullscreen || con->workspace->fullscreen == con) {
|
if (!con->is_fullscreen || !con->workspace ||
|
||||||
|
con->workspace->fullscreen == con) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (con->workspace->fullscreen) {
|
if (con->workspace->fullscreen) {
|
||||||
|
@ -557,6 +557,7 @@ struct sway_container *workspace_find_container(struct sway_workspace *ws,
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct sway_container *workspace_wrap_children(struct sway_workspace *ws) {
|
struct sway_container *workspace_wrap_children(struct sway_workspace *ws) {
|
||||||
|
struct sway_container *fs = ws->fullscreen;
|
||||||
struct sway_container *middle = container_create(NULL);
|
struct sway_container *middle = container_create(NULL);
|
||||||
middle->layout = ws->layout;
|
middle->layout = ws->layout;
|
||||||
while (ws->tiling->length) {
|
while (ws->tiling->length) {
|
||||||
@ -565,6 +566,7 @@ struct sway_container *workspace_wrap_children(struct sway_workspace *ws) {
|
|||||||
container_add_child(middle, child);
|
container_add_child(middle, child);
|
||||||
}
|
}
|
||||||
workspace_add_tiling(ws, middle);
|
workspace_add_tiling(ws, middle);
|
||||||
|
ws->fullscreen = fs;
|
||||||
return middle;
|
return middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user