all repos — openbox @ 30912d467a36b13c0d04c98a0bf8ec1b8c1cc593

openbox fork - make it a bit more like ryudo

do try_configure to find out what width the window will actually be, before adjust the x/y based on gravity, if they didn't specify the x/y
Dana Jansens danakj@orodu.net
commit

30912d467a36b13c0d04c98a0bf8ec1b8c1cc593

parent

33406a1c7f7c6098e7356ba293f129c2b768c522

1 files changed, 26 insertions(+), 18 deletions(-)

jump to
M openbox/event.copenbox/event.c

@@ -1008,8 +1008,12 @@ /* get the current area */

RECT_TO_DIMS(client->area, x, y, w, h); b = client->border_width; - ob_debug("ConfigureRequest desktop %d wmstate %d visibile %d\n", - screen_desktop, client->wmstate, client->frame->visible); + ob_debug("ConfigureRequest for \"%s\" desktop %d wmstate %d " + "visibile %d\n" + " x %d y %d w %d h %d b %d\n", + client->title, + screen_desktop, client->wmstate, client->frame->visible, + x, y, w, h, b); if (e->xconfigurerequest.value_mask & CWBorderWidth) if (client->border_width != e->xconfigurerequest.border_width) {

@@ -1038,10 +1042,10 @@ /* if a stacking change moves the window without resizing */

move = TRUE; } - if (e->xconfigurerequest.value_mask & CWX || - e->xconfigurerequest.value_mask & CWY || - e->xconfigurerequest.value_mask & CWWidth || - e->xconfigurerequest.value_mask & CWHeight) + if ((e->xconfigurerequest.value_mask & CWX) || + (e->xconfigurerequest.value_mask & CWY) || + (e->xconfigurerequest.value_mask & CWWidth) || + (e->xconfigurerequest.value_mask & CWHeight)) { if (e->xconfigurerequest.value_mask & CWX) { /* don't allow clients to move shaded windows (fvwm does this)

@@ -1061,20 +1065,10 @@

if (e->xconfigurerequest.value_mask & CWWidth) { w = e->xconfigurerequest.width; resize = TRUE; - - /* if x was not given, then use gravity to figure out the new - x. the reference point should not be moved */ - if (!(e->xconfigurerequest.value_mask & CWX)) - client_gravity_resize_w(client, &x, client->area.width, w); } if (e->xconfigurerequest.value_mask & CWHeight) { h = e->xconfigurerequest.height; resize = TRUE; - - /* if y was not given, then use gravity to figure out the new - y. the reference point should not be moved */ - if (!(e->xconfigurerequest.value_mask & CWY)) - client_gravity_resize_h(client, &y, client->area.height,h); } }

@@ -1118,8 +1112,20 @@ if (move || resize || border) {

gint lw,lh; if (move || resize) { - client_find_onscreen(client, &x, &y, w, h, FALSE); client_try_configure(client, &x, &y, &w, &h, &lw, &lh, FALSE); + + /* if x was not given, then use gravity to figure out the new + x. the reference point should not be moved */ + if ((e->xconfigurerequest.value_mask & CWWidth && + !(e->xconfigurerequest.value_mask & CWX))) + client_gravity_resize_w(client, &x, client->area.width, w); + /* if y was not given, then use gravity to figure out the new + y. the reference point should not be moved */ + if ((e->xconfigurerequest.value_mask & CWHeight && + !(e->xconfigurerequest.value_mask & CWY))) + client_gravity_resize_h(client, &y, client->area.height,h); + + client_find_onscreen(client, &x, &y, w, h, FALSE); } /* if they requested something that moves the window, or if the window is actually being changed then configure it and

@@ -1127,7 +1133,9 @@ send a configure notify to them */

if (move || !RECT_EQUAL_DIMS(client->area, x, y, w, h) || border) { - ob_debug("Doing configure\n"); + ob_debug("Granting ConfigureRequest x %d y %d w %d h %d " + "b %d\n", + x, y, w, h, b); client_configure(client, x, y, w, h, b, FALSE, TRUE); }