don't resist in orthoganal directions when key resizing windows with aspect ratios
Dana Jansens danakj@orodu.net
1 files changed,
32 insertions(+),
25 deletions(-)
jump to
M
openbox/moveresize.c
→
openbox/moveresize.c
@@ -381,7 +381,9 @@ oh = cur_h;
nw = ow + *dw; nh = oh + *dh; - if (moveresize_client->max_ratio || moveresize_client->min_ratio) { + if (!keyboard && + (moveresize_client->max_ratio || moveresize_client->min_ratio)) + { switch (dir) { case OB_DIRECTION_NORTH: case OB_DIRECTION_SOUTH:@@ -407,12 +409,13 @@ nh = (gint)(nw / moveresize_client->max_ratio);
} break; } + + /* see its actual size (apply aspect ratios) */ + client_try_configure(moveresize_client, &x, &y, &nw, &nh, &lw, &lh, + TRUE); + trydw = nw - ow; + trydh = nh - oh; } - - /* see its actual size (apply aspect ratios) */ - client_try_configure(moveresize_client, &x, &y, &nw, &nh, &lw, &lh, TRUE); - trydw = nw - ow; - trydh = nh - oh; /* resist_size_* needs the frame size */ nw += moveresize_client->frame->size.left +@@ -435,26 +438,30 @@ *dw = nw - ow;
*dh = nh - oh; /* take aspect ratios into account for resistance */ - if (*dh != trydh) { /* got resisted */ - /* resize the width based on the height */ - if (moveresize_client->min_ratio) { - if (nh * moveresize_client->min_ratio > nw) - nw = (gint)(nh * moveresize_client->min_ratio); + if (!keyboard && + (moveresize_client->max_ratio || moveresize_client->min_ratio)) + { + if (*dh != trydh) { /* got resisted */ + /* resize the width based on the height */ + if (moveresize_client->min_ratio) { + if (nh * moveresize_client->min_ratio > nw) + nw = (gint)(nh * moveresize_client->min_ratio); + } + if (moveresize_client->max_ratio) { + if (nh * moveresize_client->max_ratio < nw) + nw = (gint)(nh * moveresize_client->max_ratio); + } } - if (moveresize_client->max_ratio) { - if (nh * moveresize_client->max_ratio < nw) - nw = (gint)(nh * moveresize_client->max_ratio); - } - } - if (*dw != trydw) { /* got resisted */ - /* resize the height based on the width */ - if (moveresize_client->min_ratio) { - if (nh * moveresize_client->min_ratio > nw) - nh = (gint)(nw / moveresize_client->min_ratio); - } - if (moveresize_client->max_ratio) { - if (nh * moveresize_client->max_ratio < nw) - nh = (gint)(nw / moveresize_client->max_ratio); + if (*dw != trydw) { /* got resisted */ + /* resize the height based on the width */ + if (moveresize_client->min_ratio) { + if (nh * moveresize_client->min_ratio > nw) + nh = (gint)(nw / moveresize_client->min_ratio); + } + if (moveresize_client->max_ratio) { + if (nh * moveresize_client->max_ratio < nw) + nh = (gint)(nw / moveresize_client->max_ratio); + } } }