mirror of
https://github.com/swaywm/sway.git
synced 2024-11-23 08:21:28 +00:00
Fix moving to parallel container on another output
This commit is contained in:
parent
5ff16994c5
commit
9109b1fd11
|
@ -244,10 +244,7 @@ static int move_offs(enum movement_direction move_dir) {
|
||||||
/* Gets the index of the most extreme member based on the movement offset */
|
/* Gets the index of the most extreme member based on the movement offset */
|
||||||
static int container_limit(struct sway_container *container,
|
static int container_limit(struct sway_container *container,
|
||||||
enum movement_direction move_dir) {
|
enum movement_direction move_dir) {
|
||||||
if (container->children->length == 0) {
|
return move_offs(move_dir) < 0 ? 0 : container->children->length;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return move_offs(move_dir) < 0 ? 0 : container->children->length - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Takes one child, sets it aside, wraps the rest of the children in a new
|
/* Takes one child, sets it aside, wraps the rest of the children in a new
|
||||||
|
@ -306,7 +303,6 @@ void container_move(struct sway_container *container,
|
||||||
container_type_to_str(current->type), current->name);
|
container_type_to_str(current->type), current->name);
|
||||||
|
|
||||||
int index = index_child(current);
|
int index = index_child(current);
|
||||||
int limit = container_limit(parent, move_dir);
|
|
||||||
|
|
||||||
switch (current->type) {
|
switch (current->type) {
|
||||||
case C_OUTPUT: {
|
case C_OUTPUT: {
|
||||||
|
@ -350,7 +346,8 @@ void container_move(struct sway_container *container,
|
||||||
case C_CONTAINER:
|
case C_CONTAINER:
|
||||||
case C_VIEW:
|
case C_VIEW:
|
||||||
if (is_parallel(parent->layout, move_dir)) {
|
if (is_parallel(parent->layout, move_dir)) {
|
||||||
if (index == limit) {
|
if ((index == parent->children->length - 1 && offs > 0)
|
||||||
|
|| (index == 0 && offs < 0)) {
|
||||||
if (current->parent == container->parent) {
|
if (current->parent == container->parent) {
|
||||||
wlr_log(L_DEBUG, "Hit limit, selecting parent");
|
wlr_log(L_DEBUG, "Hit limit, selecting parent");
|
||||||
current = current->parent;
|
current = current->parent;
|
||||||
|
@ -408,7 +405,7 @@ void container_move(struct sway_container *container,
|
||||||
case C_CONTAINER:
|
case C_CONTAINER:
|
||||||
if (is_parallel(sibling->layout, move_dir)) {
|
if (is_parallel(sibling->layout, move_dir)) {
|
||||||
int limit = container_limit(sibling, invert_movement(move_dir));
|
int limit = container_limit(sibling, invert_movement(move_dir));
|
||||||
limit = limit != 0 ? limit + 1 : limit; // Convert to index
|
wlr_log(L_DEBUG, "limit: %d", limit);
|
||||||
wlr_log(L_DEBUG,
|
wlr_log(L_DEBUG,
|
||||||
"Reparenting container (parallel) to index %d "
|
"Reparenting container (parallel) to index %d "
|
||||||
"(move dir: %d)", limit, move_dir);
|
"(move dir: %d)", limit, move_dir);
|
||||||
|
|
Loading…
Reference in a new issue