From 30912d467a36b13c0d04c98a0bf8ec1b8c1cc593 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 28 May 2007 01:42:50 +0000 Subject: [PATCH] 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 --- openbox/event.c | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/openbox/event.c b/openbox/event.c index 105d6aba..f3ed676e 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -1008,8 +1008,12 @@ static void event_handle_client(ObClient *client, XEvent *e) 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 @@ static void event_handle_client(ObClient *client, XEvent *e) 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 @@ static void event_handle_client(ObClient *client, XEvent *e) 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 @@ static void event_handle_client(ObClient *client, XEvent *e) 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 @@ static void event_handle_client(ObClient *client, XEvent *e) 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); } -- 2.39.2