diff --git a/objects/client.c b/objects/client.c index 821273764..f14331d0b 100644 --- a/objects/client.c +++ b/objects/client.c @@ -1844,27 +1844,43 @@ titlebar_resize(lua_State *L, int cidx, client_t *c, client_titlebar_t bar, int * titlebars should keep its current size!) */ area_t geometry = c->geometry; int change = size - c->titlebar[bar].size; + int16_t diff_top = 0, diff_bottom = 0, diff_right = 0, diff_left = 0; switch (bar) { case CLIENT_TITLEBAR_TOP: geometry.height += change; + diff_top = change; property_name = "property::titlebar_top"; break; case CLIENT_TITLEBAR_BOTTOM: geometry.height += change; + diff_bottom = change; property_name = "property::titlebar_bottom"; break; case CLIENT_TITLEBAR_RIGHT: geometry.width += change; + diff_right = change; property_name = "property::titlebar_right"; break; case CLIENT_TITLEBAR_LEFT: geometry.width += change; + diff_left = change; property_name = "property::titlebar_left"; break; default: fatal("Unknown titlebar kind %d\n", (int) bar); } + if(c->size_hints.flags & XCB_ICCCM_SIZE_HINT_P_WIN_GRAVITY) + { + int16_t diff_x = 0, diff_y = 0; + xwindow_translate_for_gravity(c->size_hints.win_gravity, + diff_left, diff_top, + diff_right, diff_bottom, + &diff_x, &diff_y); + geometry.x += diff_x; + geometry.y += diff_y; + } + c->titlebar[bar].size = size; client_resize_do(c, geometry, true);