Skip to content

Commit

Permalink
wrap container in direction (if possible)
Browse files Browse the repository at this point in the history
Introduces container wrapping - if there is no other viable move, the
selection wraps on the first container where such action is possible.
  • Loading branch information
D.B committed Oct 7, 2016
1 parent fa11966 commit 7f558ce
Showing 1 changed file with 18 additions and 4 deletions.
22 changes: 18 additions & 4 deletions sway/layout.c
Original file line number Diff line number Diff line change
Expand Up @@ -1084,13 +1084,17 @@ swayc_t *get_swayc_in_direction_under(swayc_t *container, enum movement_directio
return container->fullscreen;
}

swayc_t *wrap_candidate = NULL;
while (true) {
// Test if we can even make a difference here
bool can_move = false;
int diff = 0;
if (parent->type == C_ROOT) {
sway_log(L_DEBUG, "Moving between outputs");
swayc_t *output = swayc_adjacent_output(container, dir, &abs_pos, true);
if (!output || output == container) {
return wrap_candidate;
}
sway_log(L_DEBUG, "Moving between outputs");
return get_swayc_in_output_direction(output, dir);
} else {
if (dir == MOVE_LEFT || dir == MOVE_RIGHT) {
Expand All @@ -1108,8 +1112,18 @@ swayc_t *get_swayc_in_direction_under(swayc_t *container, enum movement_directio

if (can_move) {
int desired = index_child(container) + diff;
if (container->is_floating || desired < 0 || desired >= parent->children->length) {
if (container->is_floating) {
can_move = false;
} else if (desired < 0 || desired >= parent->children->length) {
can_move = false;
int len = parent->children->length;
if (!wrap_candidate && len > 1) {
if (desired < 0) {
wrap_candidate = parent->children->items[len-1];
} else {
wrap_candidate = parent->children->items[0];
}
}
} else {
return parent->children->items[desired];
}
Expand All @@ -1118,8 +1132,8 @@ swayc_t *get_swayc_in_direction_under(swayc_t *container, enum movement_directio
container = parent;
parent = parent->parent;
if (!parent || container == limit) {
// Nothing we can do
return NULL;
// wrapping is the last chance
return wrap_candidate;
}
}
}
Expand Down

0 comments on commit 7f558ce

Please sign in to comment.