mirror of
https://github.com/swaywm/sway.git
synced 2024-12-30 17:06:40 +01:00
This commit is contained in:
parent
d7f8bbd353
commit
6c33f8122a
2 changed files with 25 additions and 18 deletions
|
@ -253,8 +253,8 @@ static void handle_view_focus(wlc_handle view, bool focus) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_view_geometry_request(wlc_handle handle, const struct wlc_geometry *geometry) {
|
static void handle_view_geometry_request(wlc_handle handle, const struct wlc_geometry *geometry) {
|
||||||
sway_log(L_DEBUG, "geometry request %d x %d : %d x %d",
|
sway_log(L_DEBUG, "geometry request for %ld %dx%d : %dx%d",
|
||||||
geometry->origin.x, geometry->origin.y, geometry->size.w, geometry->size.h);
|
handle, geometry->origin.x, geometry->origin.y, geometry->size.w, geometry->size.h);
|
||||||
// If the view is floating, then apply the geometry.
|
// If the view is floating, then apply the geometry.
|
||||||
// Otherwise save the desired width/height for the view.
|
// Otherwise save the desired width/height for the view.
|
||||||
// This will not do anything for the time being as WLC improperly sends geometry requests
|
// This will not do anything for the time being as WLC improperly sends geometry requests
|
||||||
|
|
|
@ -280,7 +280,6 @@ void move_container(swayc_t *container, enum movement_direction dir) {
|
||||||
// Dirty hack to fix a certain case
|
// Dirty hack to fix a certain case
|
||||||
arrange_windows(parent, -1, -1);
|
arrange_windows(parent, -1, -1);
|
||||||
arrange_windows(parent->parent, -1, -1);
|
arrange_windows(parent->parent, -1, -1);
|
||||||
update_visibility(parent->parent);
|
|
||||||
set_focused_container_for(parent->parent, container);
|
set_focused_container_for(parent->parent, container);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,31 +318,34 @@ void update_geometry(swayc_t *container) {
|
||||||
if (container->type != C_VIEW) {
|
if (container->type != C_VIEW) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int gap = swayc_gap(container);
|
swayc_t *ws = swayc_parent_by_type(container, C_WORKSPACE);
|
||||||
|
swayc_t *op = ws->parent;
|
||||||
|
int gap = container->is_floating ? 0 : swayc_gap(container);
|
||||||
|
|
||||||
struct wlc_geometry geometry = {
|
struct wlc_geometry geometry = {
|
||||||
.origin = {
|
.origin = {
|
||||||
.x = container->x + (container->is_floating ? 0 : gap / 2),
|
.x = container->x + gap/2 < op->width ? container->x + gap/2 : op->width-1,
|
||||||
.y = container->y + (container->is_floating ? 0 : gap / 2)
|
.y = container->y + gap/2 < op->height ? container->y + gap/2 : op->height-1
|
||||||
},
|
},
|
||||||
.size = {
|
.size = {
|
||||||
.w = container->width > (container->is_floating ? 0 : gap) ?
|
.w = container->width > gap ? container->width - gap : 1,
|
||||||
container->width - (container->is_floating ? 0 : gap) : 0,
|
.h = container->height > gap ? container->height - gap : 1,
|
||||||
.h = container->height > (container->is_floating ? 0 : gap) ?
|
|
||||||
container->height - (container->is_floating ? 0 : gap) : 0,
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (swayc_is_fullscreen(container)) {
|
if (swayc_is_fullscreen(container)) {
|
||||||
swayc_t *parent = swayc_parent_by_type(container, C_OUTPUT);
|
|
||||||
geometry.origin.x = 0;
|
geometry.origin.x = 0;
|
||||||
geometry.origin.y = 0;
|
geometry.origin.y = 0;
|
||||||
geometry.size.w = parent->width;
|
geometry.size.w = op->width;
|
||||||
geometry.size.h = parent->height;
|
geometry.size.h = op->height;
|
||||||
|
if (op->focused == ws) {
|
||||||
|
wlc_view_bring_to_front(container->handle);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
wlc_view_set_geometry(container->handle, 0, &geometry);
|
wlc_view_set_geometry(container->handle, 0, &geometry);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void arrange_windows(swayc_t *container, double width, double height) {
|
static void arrange_windows_r(swayc_t *container, double width, double height) {
|
||||||
int i;
|
int i;
|
||||||
if (width == -1 || height == -1) {
|
if (width == -1 || height == -1) {
|
||||||
sway_log(L_DEBUG, "Arranging layout for %p", container);
|
sway_log(L_DEBUG, "Arranging layout for %p", container);
|
||||||
|
@ -357,7 +359,7 @@ void arrange_windows(swayc_t *container, double width, double height) {
|
||||||
for (i = 0; i < container->children->length; ++i) {
|
for (i = 0; i < container->children->length; ++i) {
|
||||||
swayc_t *child = container->children->items[i];
|
swayc_t *child = container->children->items[i];
|
||||||
sway_log(L_DEBUG, "Arranging output at %d", x);
|
sway_log(L_DEBUG, "Arranging output at %d", x);
|
||||||
arrange_windows(child, -1, -1);
|
arrange_windows_r(child, -1, -1);
|
||||||
x += child->width;
|
x += child->width;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -373,7 +375,7 @@ void arrange_windows(swayc_t *container, double width, double height) {
|
||||||
child->width = width - gap * 2;
|
child->width = width - gap * 2;
|
||||||
child->height = height - gap * 2;
|
child->height = height - gap * 2;
|
||||||
sway_log(L_DEBUG, "Arranging workspace #%d at %f, %f", i, child->x, child->y);
|
sway_log(L_DEBUG, "Arranging workspace #%d at %f, %f", i, child->x, child->y);
|
||||||
arrange_windows(child, -1, -1);
|
arrange_windows_r(child, -1, -1);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case C_VIEW:
|
case C_VIEW:
|
||||||
|
@ -417,7 +419,7 @@ void arrange_windows(swayc_t *container, double width, double height) {
|
||||||
sway_log(L_DEBUG, "Calculating arrangement for %p:%d (will scale %f by %f)", child, child->type, width, scale);
|
sway_log(L_DEBUG, "Calculating arrangement for %p:%d (will scale %f by %f)", child, child->type, width, scale);
|
||||||
child->x = x + container->x;
|
child->x = x + container->x;
|
||||||
child->y = y + container->y;
|
child->y = y + container->y;
|
||||||
arrange_windows(child, child->width * scale, height);
|
arrange_windows_r(child, child->width * scale, height);
|
||||||
x += child->width;
|
x += child->width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -444,7 +446,7 @@ void arrange_windows(swayc_t *container, double width, double height) {
|
||||||
sway_log(L_DEBUG, "Calculating arrangement for %p:%d (will scale %f by %f)", child, child->type, height, scale);
|
sway_log(L_DEBUG, "Calculating arrangement for %p:%d (will scale %f by %f)", child, child->type, height, scale);
|
||||||
child->x = x + container->x;
|
child->x = x + container->x;
|
||||||
child->y = y + container->y;
|
child->y = y + container->y;
|
||||||
arrange_windows(child, width, child->height * scale);
|
arrange_windows_r(child, width, child->height * scale);
|
||||||
y += child->height;
|
y += child->height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -466,6 +468,11 @@ void arrange_windows(swayc_t *container, double width, double height) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void arrange_windows(swayc_t *container, double width, double height) {
|
||||||
|
update_visibility(container);
|
||||||
|
arrange_windows_r(container, width, height);
|
||||||
layout_log(&root_container, 0);
|
layout_log(&root_container, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue