diff --git a/sway/commands/move.c b/sway/commands/move.c index 959e5bfbf..876a56167 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c @@ -537,7 +537,8 @@ static struct cmd_results *cmd_move_container(bool no_auto_back_and_forth, struct sway_node *focus = seat_get_focus(seat); // move container - if (container->scratchpad) { + if (container_is_scratchpad_hidden_or_child(container)) { + container_detach(container); root_scratchpad_show(container); } switch (destination->type) { diff --git a/sway/tree/container.c b/sway/tree/container.c index e81c1d30e..399325e94 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -1359,7 +1359,9 @@ void container_detach(struct sway_container *child) { // We may have removed the last tiling child from the workspace. If the // workspace layout was e.g. tabbed, then at this point it may be just // H[]. So, reset it to the default (e.g. T[]) for next time. - if (!old_workspace->tiling->length) { + // But if we are evacuating a workspace with only sticky floating + // containers, the workspace will already be detached from the output. + if (old_workspace->output && !old_workspace->tiling->length) { old_workspace->layout = output_get_default_layout(old_workspace->output); } diff --git a/sway/tree/view.c b/sway/tree/view.c index 7bba29234..d699b01eb 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -280,7 +280,8 @@ void view_autoconfigure(struct sway_view *view) { (config->hide_edge_borders_smart == ESMART_NO_GAPS && !gaps_to_edge(view)); if (smart) { - bool show_border = !view_is_only_visible(view); + bool show_border = container_is_floating_or_child(con) || + !view_is_only_visible(view); con->border_left &= show_border; con->border_right &= show_border; con->border_top &= show_border;