From 62d27950faaef7b3328e3d53f1d75c082d131fd5 Mon Sep 17 00:00:00 2001 From: Uli Schlachter Date: Mon, 20 Aug 2018 10:33:06 +0200 Subject: [PATCH] Handle border width changes in ConfigureRequests early The function window_set_border_width() causes its own gravity handling. Thus, to make sure that this gravity handling does not interfere with what the code in here does later, we just apply changes to the border width first, and then do everything else. Signed-off-by: Uli Schlachter --- event.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/event.c b/event.c index 29bcbe8d..b6a1977b 100644 --- a/event.c +++ b/event.c @@ -329,6 +329,14 @@ event_handle_configurerequest(xcb_configure_request_event_t *ev) if((c = client_getbywin(ev->window))) { + lua_State *L = globalconf_get_lua_State(); + if(ev->value_mask & XCB_CONFIG_WINDOW_BORDER_WIDTH) + { + luaA_object_push(L, c); + window_set_border_width(L, -1, ev->border_width); + lua_pop(L, 1); + } + area_t geometry = c->geometry; uint16_t bw = c->border_width; uint16_t tb_left = c->titlebar[CLIENT_TITLEBAR_LEFT].size; @@ -339,9 +347,7 @@ event_handle_configurerequest(xcb_configure_request_event_t *ev) uint16_t deco_right = bw + tb_right; uint16_t deco_top = bw + tb_top; uint16_t deco_bottom = bw + tb_bottom; - int16_t diff_w = 0, diff_h = 0, diff_border = 0; - - lua_State *L = globalconf_get_lua_State(); + int16_t diff_w = 0, diff_h = 0; if(ev->value_mask & XCB_CONFIG_WINDOW_WIDTH) { @@ -359,21 +365,11 @@ event_handle_configurerequest(xcb_configure_request_event_t *ev) geometry.height += tb_top + tb_bottom; diff_h = geometry.height - old_h; } - if(ev->value_mask & XCB_CONFIG_WINDOW_BORDER_WIDTH) - { - diff_border = ev->border_width - bw; - diff_h += diff_border; - diff_w += diff_border; - - luaA_object_push(L, c); - window_set_border_width(L, -1, ev->border_width); - lua_pop(L, 1); - } /* If the client resizes without moving itself, apply window gravity */ if(c->size_hints.flags & XCB_ICCCM_SIZE_HINT_P_WIN_GRAVITY) { - xwindow_translate_for_gravity(c->size_hints.win_gravity, diff_border, diff_border, diff_w, diff_h, &geometry.x, &geometry.y); + xwindow_translate_for_gravity(c->size_hints.win_gravity, 0, 0, diff_w, diff_h, &geometry.x, &geometry.y); } if(ev->value_mask & XCB_CONFIG_WINDOW_X) {