aboutsummaryrefslogtreecommitdiff
path: root/sway/tree/container.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/tree/container.c')
-rw-r--r--sway/tree/container.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c
index 68fbec2f..67e69d9d 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -821,6 +821,8 @@ void container_set_floating(struct sway_container *container, bool enable) {
struct sway_seat *seat = input_manager_current_seat();
struct sway_workspace *workspace = container->pending.workspace;
+ struct sway_container *focus = seat_get_focused_container(seat);
+ bool set_focus = focus == container;
if (enable) {
struct sway_container *old_parent = container->pending.parent;
@@ -835,6 +837,10 @@ void container_set_floating(struct sway_container *container, bool enable) {
container_floating_set_default_size(container);
container_floating_resize_and_center(container);
if (old_parent) {
+ if (set_focus) {
+ seat_set_raw_focus(seat, &old_parent->node);
+ seat_set_raw_focus(seat, &container->node);
+ }
container_reap_empty(old_parent);
}
} else {
@@ -846,7 +852,11 @@ void container_set_floating(struct sway_container *container, bool enable) {
struct sway_container *reference =
seat_get_focus_inactive_tiling(seat, workspace);
if (reference) {
- container_add_sibling(reference, container, 1);
+ if (reference->view) {
+ container_add_sibling(reference, container, 1);
+ } else {
+ container_add_child(reference, container);
+ }
container->pending.width = reference->pending.width;
container->pending.height = reference->pending.height;
} else {