aboutsummaryrefslogtreecommitdiff
path: root/sway/tree
diff options
context:
space:
mode:
Diffstat (limited to 'sway/tree')
-rw-r--r--sway/tree/container.c34
-rw-r--r--sway/tree/view.c11
2 files changed, 28 insertions, 17 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c
index 458ed7ff..3740cb53 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -1009,19 +1009,25 @@ void container_discover_outputs(struct sway_container *con) {
}
void container_remove_gaps(struct sway_container *c) {
- if (c->current_gaps == 0) {
+ if (c->current_gaps.top == 0 && c->current_gaps.right == 0 &&
+ c->current_gaps.bottom == 0 && c->current_gaps.left == 0) {
return;
}
- c->width += c->current_gaps * 2;
- c->height += c->current_gaps * 2;
- c->x -= c->current_gaps;
- c->y -= c->current_gaps;
- c->current_gaps = 0;
+ c->width += c->current_gaps.left + c->current_gaps.right;
+ c->height += c->current_gaps.top + c->current_gaps.bottom;
+ c->x -= c->current_gaps.left;
+ c->y -= c->current_gaps.top;
+
+ c->current_gaps.top = 0;
+ c->current_gaps.right = 0;
+ c->current_gaps.bottom = 0;
+ c->current_gaps.left = 0;
}
void container_add_gaps(struct sway_container *c) {
- if (c->current_gaps > 0) {
+ if (c->current_gaps.top > 0 || c->current_gaps.right > 0 ||
+ c->current_gaps.bottom > 0 || c->current_gaps.left > 0) {
return;
}
// Linear containers don't have gaps because it'd create double gaps
@@ -1054,11 +1060,15 @@ void container_add_gaps(struct sway_container *c) {
struct sway_workspace *ws = c->workspace;
- c->current_gaps = ws->gaps_inner;
- c->x += c->current_gaps;
- c->y += c->current_gaps;
- c->width -= 2 * c->current_gaps;
- c->height -= 2 * c->current_gaps;
+ c->current_gaps.top = c->y == ws->y ? ws->gaps_inner : 0;
+ c->current_gaps.right = ws->gaps_inner;
+ c->current_gaps.bottom = ws->gaps_inner;
+ c->current_gaps.left = c->x == ws->x ? ws->gaps_inner : 0;
+
+ c->x += c->current_gaps.left;
+ c->y += c->current_gaps.top;
+ c->width -= c->current_gaps.left + c->current_gaps.right;
+ c->height -= c->current_gaps.top + c->current_gaps.bottom;
}
enum sway_container_layout container_parent_layout(struct sway_container *con) {
diff --git a/sway/tree/view.c b/sway/tree/view.c
index 1aa59e68..03bb01d3 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -185,7 +185,8 @@ bool view_is_only_visible(struct sway_view *view) {
static bool gaps_to_edge(struct sway_view *view) {
struct sway_container *con = view->container;
while (con) {
- if (con->current_gaps > 0) {
+ if (con->current_gaps.top > 0 || con->current_gaps.right > 0 ||
+ con->current_gaps.bottom > 0 || con->current_gaps.left > 0) {
return true;
}
con = con->parent;
@@ -222,15 +223,15 @@ void view_autoconfigure(struct sway_view *view) {
if (config->hide_edge_borders == E_BOTH
|| config->hide_edge_borders == E_VERTICAL
|| (smart && !other_views && no_gaps)) {
- con->border_left = con->x - con->current_gaps != ws->x;
- int right_x = con->x + con->width + con->current_gaps;
+ con->border_left = con->x - con->current_gaps.left != ws->x;
+ int right_x = con->x + con->width + con->current_gaps.right;
con->border_right = right_x != ws->x + ws->width;
}
if (config->hide_edge_borders == E_BOTH
|| config->hide_edge_borders == E_HORIZONTAL
|| (smart && !other_views && no_gaps)) {
- con->border_top = con->y - con->current_gaps != ws->y;
- int bottom_y = con->y + con->height + con->current_gaps;
+ con->border_top = con->y - con->current_gaps.top != ws->y;
+ int bottom_y = con->y + con->height + con->current_gaps.bottom;
con->border_bottom = bottom_y != ws->y + ws->height;
}