aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sway/commands.c1
-rw-r--r--sway/container.c13
-rw-r--r--sway/layout.c16
3 files changed, 25 insertions, 5 deletions
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) {