when reconfiguring, readjust clients positions based on the change in their decoration sizes and their gravity
This commit is contained in:
parent
e8cd4c4d8d
commit
50a0bf090b
1 changed files with 62 additions and 0 deletions
|
@ -330,10 +330,72 @@ gint main(gint argc, gchar **argv)
|
||||||
/* redecorate all existing windows */
|
/* redecorate all existing windows */
|
||||||
for (it = client_list; it; it = g_list_next(it)) {
|
for (it = client_list; it; it = g_list_next(it)) {
|
||||||
ObClient *c = it->data;
|
ObClient *c = it->data;
|
||||||
|
Strut oldsize, newsize;
|
||||||
|
gint x, y;
|
||||||
|
|
||||||
|
oldsize = c->frame->size;
|
||||||
|
x = c->area.x;
|
||||||
|
y = c->area.y;
|
||||||
|
|
||||||
/* the new config can change the window's decorations */
|
/* the new config can change the window's decorations */
|
||||||
client_setup_decor_and_functions(c, TRUE);
|
client_setup_decor_and_functions(c, TRUE);
|
||||||
/* redraw the frames */
|
/* redraw the frames */
|
||||||
frame_adjust_area(c->frame, TRUE, TRUE, FALSE);
|
frame_adjust_area(c->frame, TRUE, TRUE, FALSE);
|
||||||
|
|
||||||
|
/* move windows if their decorations are a new size, based
|
||||||
|
on their gravity */
|
||||||
|
newsize = c->frame->size;
|
||||||
|
|
||||||
|
/* x coord */
|
||||||
|
switch (c->gravity) {
|
||||||
|
case NorthWestGravity:
|
||||||
|
case WestGravity:
|
||||||
|
case SouthWestGravity:
|
||||||
|
break;
|
||||||
|
case NorthGravity:
|
||||||
|
case CenterGravity:
|
||||||
|
case SouthGravity:
|
||||||
|
x += (newsize.left - oldsize.left +
|
||||||
|
oldsize.right - newsize.right) / 2;
|
||||||
|
break;
|
||||||
|
case NorthEastGravity:
|
||||||
|
case EastGravity:
|
||||||
|
case SouthEastGravity:
|
||||||
|
x -= (newsize.left - oldsize.left +
|
||||||
|
newsize.right - oldsize.right);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case StaticGravity:
|
||||||
|
x -= newsize.left - oldsize.left;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* y coord */
|
||||||
|
switch (c->gravity) {
|
||||||
|
case NorthWestGravity:
|
||||||
|
case NorthGravity:
|
||||||
|
case NorthEastGravity:
|
||||||
|
break;
|
||||||
|
case WestGravity:
|
||||||
|
case CenterGravity:
|
||||||
|
case EastGravity:
|
||||||
|
y += (newsize.top - oldsize.top +
|
||||||
|
oldsize.bottom - newsize.bottom) / 2;
|
||||||
|
break;
|
||||||
|
case SouthWestGravity:
|
||||||
|
case SouthGravity:
|
||||||
|
case SouthEastGravity:
|
||||||
|
y -= (newsize.top - oldsize.top +
|
||||||
|
newsize.bottom - oldsize.bottom);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case StaticGravity:
|
||||||
|
x -= newsize.top - oldsize.top;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (x != c->area.x || y != c->area.y)
|
||||||
|
client_move(c, x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue