all repos — openbox @ ca1a27bebac84dbc4f1c594612ac6348b94b53b4

openbox fork - make it a bit more like ryudo

Revert "Revert "make windows stay on screen when..."

Just kidding.  This doesn't revert d81d54c7a977a034199f24fc8fa7433e634aaf91 but
it redoes the work that patch reverted in a better, less intrusive, way.
Dana Jansens danakj@orodu.net
commit

ca1a27bebac84dbc4f1c594612ac6348b94b53b4

parent

c828154886a40fa48b0545fd5d22e277f6d210e9

1 files changed, 19 insertions(+), 4 deletions(-)

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

@@ -1513,15 +1513,30 @@ }

msgtype = e->xproperty.atom; if (msgtype == XA_WM_NORMAL_HINTS) { + int x, y, w, h, lw, lh; + ob_debug("Update NORMAL hints"); client_update_normal_hints(client); /* normal hints can make a window non-resizable */ client_setup_decor_and_functions(client, FALSE); - /* make sure the client's sizes are within its bounds, but only - reconfigure the window if it needs to. emacs will update its - normal hints every time it receives a conigurenotify */ - client_reconfigure(client, FALSE); + x = client->area.x; + y = client->area.y; + w = client->area.width; + h = client->area.height; + + /* apply the new normal hints */ + client_try_configure(client, &x, &y, &w, &h, &lw, &lh, FALSE); + /* make sure the window is visible, and if the window is resized + off-screen due to the normal hints changing then this will push + it back onto the screen. */ + client_find_onscreen(client, &x, &y, w, h, FALSE); + + /* make sure the client's sizes are within its bounds, but don't + make it reply with a configurenotify unless something changed. + emacs will update its normal hints every time it receives a + configurenotify */ + client_configure(client, x, y, w, h, FALSE, TRUE, FALSE); } else if (msgtype == OBT_PROP_ATOM(MOTIF_WM_HINTS)) { client_get_mwm_hints(client); /* This can override some mwm hints */