|
|
@ -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);
|
|
|
|
struct wlc_size resolution = *wlc_output_get_resolution(container->handle);
|
|
|
|
width = resolution.w; height = resolution.h;
|
|
|
|
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) {
|
|
|
|
for (i = 0; i < desktop_shell.panels->length; ++i) {
|
|
|
|
struct panel_config *config = desktop_shell.panels->items[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);
|
|
|
|
struct wlc_size size = *wlc_surface_get_size(config->surface);
|
|
|
|
switch (desktop_shell.panel_position) {
|
|
|
|
switch (desktop_shell.panel_position) {
|
|
|
|
case DESKTOP_SHELL_PANEL_POSITION_TOP:
|
|
|
|
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:
|
|
|
|
case C_VIEW:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
container->width = width;
|
|
|
|
container->width = width;
|
|
|
|