aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorS. Christoffer Eliesen <christoffer@eliesen.no>2015-11-28 23:48:22 +0100
committerS. Christoffer Eliesen <christoffer@eliesen.no>2015-11-29 13:00:10 +0100
commitbadfb4bb43f18694a584f47e81ef4f2206b442bb (patch)
tree98d07b0e80a9db1283f9a2447b91426c33bbad37
parent01c5349e1a792c40725a23d95c537419ee7cdb1a (diff)
downloadsway-badfb4bb43f18694a584f47e81ef4f2206b442bb.tar.xz
cmd_floating: Don't add non-float as sibling to float.
When turning a float to a non-float, `get_focused_container` might return another floating view, causing the active view to be inserted into the floating list on its workspace instead of the normal child list which it should. (Since it has `is_floating` as false the resulting discrepency triggered other bad behaviour eventually leading sway to crash.) This patch fixes that by simply checking floating status before making it a sibling.
-rw-r--r--sway/commands.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/sway/commands.c b/sway/commands.c
index 42845f65..13fc29ad 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -344,14 +344,12 @@ static struct cmd_results *cmd_floating(int argc, char **argv) {
} else if (view->is_floating && !wants_floating) {
// Delete the view from the floating list and unset its is_floating flag
- // Using length-1 as the index is safe because the view must be the currently
- // focused floating output
remove_child(view);
view->is_floating = false;
// Get the properly focused container, and add in the view there
swayc_t *focused = container_under_pointer();
// If focused is null, it's because the currently focused container is a workspace
- if (focused == NULL) {
+ if (focused == NULL || focused->is_floating) {
focused = swayc_active_workspace();
}
set_focused_container(focused);