mirror of
https://github.com/swaywm/sway.git
synced 2024-11-14 14:34:07 +01:00
Respect border settings when rendering lone tabbed/stacked child
In i3, when a child of a tabbed or stacked container has no siblings, its border settings are respected. This patch achieves the same effect by rendering a lone tabbed/stacked child as if it's a linear container. This makes the border settings be respected. Over in view_autoconfigure, we compensate for this by only adjusting `y_offset` if there's multiple children.
This commit is contained in:
parent
b63669a2a0
commit
65328ef60c
@ -781,6 +781,13 @@ static void render_containers_stacked(struct sway_output *output,
|
|||||||
|
|
||||||
static void render_containers(struct sway_output *output,
|
static void render_containers(struct sway_output *output,
|
||||||
pixman_region32_t *damage, struct parent_data *parent) {
|
pixman_region32_t *damage, struct parent_data *parent) {
|
||||||
|
if (parent->children->length == 1) {
|
||||||
|
struct sway_container *child = parent->children->items[0];
|
||||||
|
if (child->view) {
|
||||||
|
render_containers_linear(output, damage, parent);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
switch (parent->layout) {
|
switch (parent->layout) {
|
||||||
case L_NONE:
|
case L_NONE:
|
||||||
case L_HORIZ:
|
case L_HORIZ:
|
||||||
|
@ -242,23 +242,23 @@ void view_autoconfigure(struct sway_view *view) {
|
|||||||
view->border_bottom = bottom_y != ws->y + ws->height;
|
view->border_bottom = bottom_y != ws->y + ws->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
double x, y, width, height;
|
|
||||||
x = y = width = height = 0;
|
|
||||||
double y_offset = 0;
|
|
||||||
|
|
||||||
// In a tabbed or stacked container, the container's y is the top of the
|
// In a tabbed or stacked container, the container's y is the top of the
|
||||||
// title area. We have to offset the surface y by the height of the title,
|
// title area. We have to offset the surface y by the height of the title,
|
||||||
// bar, and disable any top border because we'll always have the title bar.
|
// bar, and disable any top border because we'll always have the title bar.
|
||||||
|
double y_offset = 0;
|
||||||
enum sway_container_layout layout = container_parent_layout(con);
|
enum sway_container_layout layout = container_parent_layout(con);
|
||||||
if (layout == L_TABBED && !container_is_floating(con)) {
|
list_t *siblings = container_get_siblings(con);
|
||||||
y_offset = container_titlebar_height();
|
if (siblings->length > 1 && !container_is_floating(con)) {
|
||||||
view->border_top = false;
|
if (layout == L_TABBED) {
|
||||||
} else if (layout == L_STACKED && !container_is_floating(con)) {
|
y_offset = container_titlebar_height();
|
||||||
list_t *siblings = container_get_siblings(con);
|
view->border_top = false;
|
||||||
y_offset = container_titlebar_height() * siblings->length;
|
} else if (layout == L_STACKED) {
|
||||||
view->border_top = false;
|
y_offset = container_titlebar_height() * siblings->length;
|
||||||
|
view->border_top = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double x, y, width, height = 0;
|
||||||
switch (view->border) {
|
switch (view->border) {
|
||||||
case B_CSD:
|
case B_CSD:
|
||||||
case B_NONE:
|
case B_NONE:
|
||||||
|
Loading…
Reference in New Issue
Block a user