aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/workspace.c
diff options
context:
space:
mode:
authorLibravatar Pedro CĂ´rte-Real <pedro@pedrocr.net>2019-07-06 11:57:32 +0100
committerLibravatar Brian Ashworth <bosrsf04@gmail.com>2019-07-15 23:46:27 -0400
commitd0233af3b39475b47be4248846536811ddca2624 (patch)
treeacc61150bd9e6bc1a69c8e7f38a700e8a9e8b2ed /sway/tree/workspace.c
parentUse -fmacro-prefix-map to strip build path (diff)
downloadsway-d0233af3b39475b47be4248846536811ddca2624.tar.gz
sway-d0233af3b39475b47be4248846536811ddca2624.tar.zst
sway-d0233af3b39475b47be4248846536811ddca2624.zip
Rework gaps code to be simpler and correct
Instead of tracking gaps per child apply gaps in two logical places: 1. In tiled containers use the layout code to add the gaps between windows. This is much simpler and guarantees that the sizing of children is correct. 2. In the workspace itself apply all the gaps around the edge. Here we're in the correct position to size inner and outer gaps correctly and decide on smart gaps in a single location. Fixes #4296
Diffstat (limited to 'sway/tree/workspace.c')
-rw-r--r--sway/tree/workspace.c38
1 files changed, 8 insertions, 30 deletions
diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c
index 914b6a9d..accdf6e3 100644
--- a/sway/tree/workspace.c
+++ b/sway/tree/workspace.c
@@ -700,28 +700,7 @@ void workspace_insert_tiling(struct sway_workspace *workspace,
700 node_set_dirty(&con->node); 700 node_set_dirty(&con->node);
701} 701}
702 702
703void workspace_remove_gaps(struct sway_workspace *ws) {
704 if (ws->current_gaps.top == 0 && ws->current_gaps.right == 0 &&
705 ws->current_gaps.bottom == 0 && ws->current_gaps.left == 0) {
706 return;
707 }
708
709 ws->width += ws->current_gaps.left + ws->current_gaps.right;
710 ws->height += ws->current_gaps.top + ws->current_gaps.bottom;
711 ws->x -= ws->current_gaps.left;
712 ws->y -= ws->current_gaps.top;
713
714 ws->current_gaps.top = 0;
715 ws->current_gaps.right = 0;
716 ws->current_gaps.bottom = 0;
717 ws->current_gaps.left = 0;
718}
719
720void workspace_add_gaps(struct sway_workspace *ws) { 703void workspace_add_gaps(struct sway_workspace *ws) {
721 if (ws->current_gaps.top > 0 || ws->current_gaps.right > 0 ||
722 ws->current_gaps.bottom > 0 || ws->current_gaps.left > 0) {
723 return;
724 }
725 if (config->smart_gaps) { 704 if (config->smart_gaps) {
726 struct sway_seat *seat = input_manager_get_default_seat(); 705 struct sway_seat *seat = input_manager_get_default_seat();
727 struct sway_container *focus = 706 struct sway_container *focus =
@@ -730,20 +709,19 @@ void workspace_add_gaps(struct sway_workspace *ws) {
730 focus = seat_get_focus_inactive_view(seat, &focus->node); 709 focus = seat_get_focus_inactive_view(seat, &focus->node);
731 } 710 }
732 if (focus && focus->view && view_is_only_visible(focus->view)) { 711 if (focus && focus->view && view_is_only_visible(focus->view)) {
712 ws->current_gaps.top = 0;
713 ws->current_gaps.right = 0;
714 ws->current_gaps.bottom = 0;
715 ws->current_gaps.left = 0;
733 return; 716 return;
734 } 717 }
735 } 718 }
736 719
737 ws->current_gaps = ws->gaps_outer; 720 ws->current_gaps = ws->gaps_outer;
738 if (ws->layout == L_TABBED || ws->layout == L_STACKED) { 721 ws->current_gaps.top += ws->gaps_inner;
739 // We have to add inner gaps for this, because children of tabbed and 722 ws->current_gaps.right += ws->gaps_inner;
740 // stacked containers don't apply their own gaps - they assume the 723 ws->current_gaps.bottom += ws->gaps_inner;
741 // tabbed/stacked container is using gaps. 724 ws->current_gaps.left += ws->gaps_inner;
742 ws->current_gaps.top += ws->gaps_inner;
743 ws->current_gaps.right += ws->gaps_inner;
744 ws->current_gaps.bottom += ws->gaps_inner;
745 ws->current_gaps.left += ws->gaps_inner;
746 }
747 725
748 ws->x += ws->current_gaps.left; 726 ws->x += ws->current_gaps.left;
749 ws->y += ws->current_gaps.top; 727 ws->y += ws->current_gaps.top;