diff --git a/sway/commands.c b/sway/commands.c index 2bdfeff6..df48724a 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -366,6 +366,7 @@ static bool cmd_move(struct sway_config *config, int argc, char **argv) { return false; } + // TODO handle case of workspace, something similar to _do_split if (view->type != C_CONTAINER && view->type != C_VIEW) { return false; } diff --git a/sway/container.c b/sway/container.c index fda90e5b..3558809a 100644 --- a/sway/container.c +++ b/sway/container.c @@ -524,6 +524,19 @@ void set_view_visibility(swayc_t *view, void *data) { if (!ASSERT_NONNULL(view)) { return; } + // TODO add something like this. +// if (container->type == C_ROOT) { +// container->visible = true; +// } else { +// // Inherit visibility +// swayc_t *parent = container->parent; +// container->visible = parent->visible; +// // special cases where visibility depends on focus +// if (parent->type == C_OUTPUT || parent->layout == L_TABBED || +// parent->layout == L_STACKED) { +// container->visible = parent->focused == container; +// } +// } bool visible = *(bool *)data; if (view->type == C_VIEW) { wlc_view_set_output(view->handle, swayc_parent_by_type(view, C_OUTPUT)->handle); diff --git a/sway/layout.c b/sway/layout.c index 4fdf7b51..5ade5e63 100644 --- a/sway/layout.c +++ b/sway/layout.c @@ -19,6 +19,7 @@ void init_layout(void) { root_container.layout = L_NONE; root_container.children = create_list(); root_container.handle = -1; + root_container.visible = true; } int index_child(const swayc_t *child) { @@ -238,11 +239,16 @@ void move_container_to(swayc_t* container, swayc_t* destination) { // Destroy old container if we need to parent = destroy_container(parent); // Refocus - set_focused_container(get_focused_view(&root_container)); - update_visibility(container); - update_visibility(parent); - arrange_windows(parent, -1, -1); - arrange_windows(destination->parent, -1, -1); + swayc_t *op1 = swayc_parent_by_type(destination, C_OUTPUT); + swayc_t *op2 = swayc_parent_by_type(parent, C_OUTPUT); + set_focused_container(get_focused_view(op1)); + arrange_windows(op1, -1, -1); + update_visibility(op1); + if (op1 != op2) { + set_focused_container(get_focused_view(op2)); + arrange_windows(op2, -1, -1); + update_visibility(op2); + } } void update_geometry(swayc_t *container) {