aboutsummaryrefslogtreecommitdiff
path: root/sway/layout.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/layout.c')
-rw-r--r--sway/layout.c49
1 files changed, 29 insertions, 20 deletions
diff --git a/sway/layout.c b/sway/layout.c
index 08d06d0b..97c857a1 100644
--- a/sway/layout.c
+++ b/sway/layout.c
@@ -432,9 +432,29 @@ static void arrange_windows_r(swayc_t *container, double width, double height) {
{
struct wlc_size resolution = *wlc_output_get_resolution(container->handle);
width = resolution.w; height = resolution.h;
+ // output must have correct size due to e.g. seamless mouse,
+ // but a workspace might be smaller depending on panels.
+ container->width = width;
+ container->height = height;
+ }
+ // arrange all workspaces:
+ for (i = 0; i < container->children->length; ++i) {
+ swayc_t *child = container->children->items[i];
+ arrange_windows_r(child, -1, -1);
+ }
+ // Bring all unmanaged views to the front
+ for (i = 0; i < container->unmanaged->length; ++i) {
+ wlc_handle *handle = container->unmanaged->items[i];
+ wlc_view_bring_to_front(*handle);
+ }
+ return;
+ case C_WORKSPACE:
+ {
+ swayc_t *output = swayc_parent_by_type(container, C_OUTPUT);
+ int width = output->width, height = output->height;
for (i = 0; i < desktop_shell.panels->length; ++i) {
struct panel_config *config = desktop_shell.panels->items[i];
- if (config->output == container->handle) {
+ if (config->output == output->handle) {
struct wlc_size size = *wlc_surface_get_size(config->surface);
switch (desktop_shell.panel_position) {
case DESKTOP_SHELL_PANEL_POSITION_TOP:
@@ -452,27 +472,16 @@ static void arrange_windows_r(swayc_t *container, double width, double height) {
}
}
}
+ int gap = swayc_gap(container);
+ container->x = gap;
+ container->y = gap;
+ container->width = width - gap * 2;
+ container->height = height - gap * 2;
+ sway_log(L_DEBUG, "Arranging workspace #%d at %f, %f", i, container->x, container->y);
- container->width = width;
- container->height = height;
- for (i = 0; i < container->children->length; ++i) {
- swayc_t *child = container->children->items[i];
- int gap = swayc_gap(child);
- child->x = x + gap;
- child->y = y + gap;
- child->width = width - gap * 2;
- child->height = height - gap * 2;
- sway_log(L_DEBUG, "Arranging workspace #%d at %f, %f", i, child->x, child->y);
- arrange_windows_r(child, -1, -1);
- }
-
- // Bring all unmanaged views to the front
- for (i = 0; i < container->unmanaged->length; ++i) {
- wlc_handle *handle = container->unmanaged->items[i];
- wlc_view_bring_to_front(*handle);
- }
}
- return;
+ // children are properly handled below
+ break;
case C_VIEW:
{
container->width = width;