aboutsummaryrefslogtreecommitdiff
path: root/sway/layout.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/layout.c')
-rw-r--r--sway/layout.c46
1 files changed, 24 insertions, 22 deletions
diff --git a/sway/layout.c b/sway/layout.c
index e2f31848..fdd2fe6b 100644
--- a/sway/layout.c
+++ b/sway/layout.c
@@ -296,7 +296,7 @@ void move_container(swayc_t *container, enum movement_direction dir) {
sway_log(L_DEBUG, "container:%p, parent:%p, child %p,",
container,parent,child);
if (parent->layout == layout
- || layout == L_NONE /* accept any layout for next/prev direction */
+ || (layout == L_NONE && parent->type == C_CONTAINER) /* accept any layout for next/prev direction */
|| (parent->layout == L_TABBED && layout == L_HORIZ)
|| (parent->layout == L_STACKED && layout == L_VERT)
|| is_auto_layout(parent->layout)) {
@@ -321,16 +321,16 @@ void move_container(swayc_t *container, enum movement_direction dir) {
}
// if move command makes container change from master to slave
// (or the contrary), reset its geometry an the one of the replaced item.
- if (parent->nb_master &&
- (size_t) parent->children->length > parent->nb_master) {
+ if (parent->nb_master
+ && (size_t)parent->children->length > parent->nb_master) {
swayc_t *swap_geom = NULL;
// if child is being promoted/demoted, it will swap geometry
// with the sibling being demoted/promoted.
if ((dir == MOVE_NEXT && desired == 0)
- || (dir == MOVE_PREV && (size_t) desired == parent->nb_master - 1)) {
+ || (dir == MOVE_PREV && (size_t)desired == parent->nb_master - 1)) {
swap_geom = parent->children->items[parent->nb_master - 1];
- } else if ((dir == MOVE_NEXT && (size_t) desired == parent->nb_master)
- || (dir == MOVE_PREV && desired == parent->children->length - 1)) {
+ } else if ((dir == MOVE_NEXT && (size_t)desired == parent->nb_master)
+ || (dir == MOVE_PREV && desired == parent->children->length - 1)) {
swap_geom = parent->children->items[parent->nb_master];
}
if (swap_geom) {
@@ -837,9 +837,9 @@ static void apply_tabbed_or_stacked_layout(swayc_t *container, double x,
double height);
static void apply_auto_layout(swayc_t *container, const double x, const double y,
- const double width, const double height,
- enum swayc_layouts group_layout,
- bool master_first);
+ const double width, const double height,
+ enum swayc_layouts group_layout,
+ bool master_first);
static void arrange_windows_r(swayc_t *container, double width, double height) {
int i;
@@ -972,11 +972,11 @@ static void arrange_windows_r(swayc_t *container, double width, double height) {
case L_HORIZ:
default:
apply_horiz_layout(container, x, y, width, height, 0,
- container->children->length);
+ container->children->length);
break;
case L_VERT:
apply_vert_layout(container, x, y, width, height, 0,
- container->children->length);
+ container->children->length);
break;
case L_TABBED:
case L_STACKED:
@@ -1007,7 +1007,7 @@ static void arrange_windows_r(swayc_t *container, double width, double height) {
if (swayc_is_fullscreen(view)) {
wlc_view_bring_to_front(view->handle);
} else if (!container->focused ||
- !swayc_is_fullscreen(container->focused)) {
+ !swayc_is_fullscreen(container->focused)) {
wlc_view_bring_to_front(view->handle);
}
}
@@ -1068,8 +1068,8 @@ void apply_horiz_layout(swayc_t *container, const double x, const double y,
}
void apply_vert_layout(swayc_t *container, const double x, const double y,
- const double width, const double height, const int start,
- const int end) {
+ const double width, const double height, const int start,
+ const int end) {
int i;
double scale = 0;
// Calculate total height
@@ -1121,7 +1121,7 @@ void apply_vert_layout(swayc_t *container, const double x, const double y,
}
void apply_tabbed_or_stacked_layout(swayc_t *container, double x, double y,
- double width, double height) {
+ double width, double height) {
int i;
swayc_t *focused = NULL;
for (i = 0; i < container->children->length; ++i) {
@@ -1141,9 +1141,9 @@ void apply_tabbed_or_stacked_layout(swayc_t *container, double x, double y,
}
void apply_auto_layout(swayc_t *container, const double x, const double y,
- const double width, const double height,
- enum swayc_layouts group_layout,
- bool master_first) {
+ const double width, const double height,
+ enum swayc_layouts group_layout,
+ bool master_first) {
// Auto layout "container" in width x height @ x, y
// using "group_layout" for each of the groups in the container.
// There is one "master" group, plus container->nb_slave_groups.
@@ -1342,7 +1342,7 @@ swayc_t *get_swayc_in_direction_under(swayc_t *container, enum movement_directio
return NULL;
} else {
int desired = (focused_idx + (dir == MOVE_NEXT ? 1 : -1)) %
- parent->children->length;
+ parent->children->length;
if (desired < 0) {
desired += parent->children->length;
}
@@ -1504,7 +1504,9 @@ bool is_auto_layout(enum swayc_layouts layout) {
* Return the number of master elements in a container
*/
static inline size_t auto_master_count(const swayc_t *container) {
- return MIN(container->nb_master, container->children->length);
+ sway_assert(container->children->length >= 0, "Container %p has (negative) children %d",
+ container, container->children->length);
+ return MIN(container->nb_master, (size_t)container->children->length);
}
/**
@@ -1535,7 +1537,7 @@ size_t auto_group_count(const swayc_t *container) {
*/
int auto_group_start_index(const swayc_t *container, int index) {
if (index < 0 || ! is_auto_layout(container->layout)
- || (size_t) index < container->nb_master) {
+ || (size_t)index < container->nb_master) {
return 0;
} else {
size_t nb_slaves = auto_slave_count(container);
@@ -1591,7 +1593,7 @@ size_t auto_group_index(const swayc_t *container, int index) {
}
bool master_first = (container->layout == L_AUTO_LEFT || container->layout == L_AUTO_TOP);
size_t nb_slaves = auto_slave_count(container);
- if ((size_t) index < container->nb_master) {
+ if ((size_t)index < container->nb_master) {
if (master_first || nb_slaves <= 0) {
return 0;
} else {