Apply window gravity for titlebar resizes

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Uli Schlachter 2015-10-10 17:44:11 +02:00
parent e73335d52d
commit 3b97d1c1a7
1 changed files with 16 additions and 0 deletions

View File

@ -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!) */ * titlebars should keep its current size!) */
area_t geometry = c->geometry; area_t geometry = c->geometry;
int change = size - c->titlebar[bar].size; int change = size - c->titlebar[bar].size;
int16_t diff_top = 0, diff_bottom = 0, diff_right = 0, diff_left = 0;
switch (bar) { switch (bar) {
case CLIENT_TITLEBAR_TOP: case CLIENT_TITLEBAR_TOP:
geometry.height += change; geometry.height += change;
diff_top = change;
property_name = "property::titlebar_top"; property_name = "property::titlebar_top";
break; break;
case CLIENT_TITLEBAR_BOTTOM: case CLIENT_TITLEBAR_BOTTOM:
geometry.height += change; geometry.height += change;
diff_bottom = change;
property_name = "property::titlebar_bottom"; property_name = "property::titlebar_bottom";
break; break;
case CLIENT_TITLEBAR_RIGHT: case CLIENT_TITLEBAR_RIGHT:
geometry.width += change; geometry.width += change;
diff_right = change;
property_name = "property::titlebar_right"; property_name = "property::titlebar_right";
break; break;
case CLIENT_TITLEBAR_LEFT: case CLIENT_TITLEBAR_LEFT:
geometry.width += change; geometry.width += change;
diff_left = change;
property_name = "property::titlebar_left"; property_name = "property::titlebar_left";
break; break;
default: default:
fatal("Unknown titlebar kind %d\n", (int) bar); 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; c->titlebar[bar].size = size;
client_resize_do(c, geometry, true); client_resize_do(c, geometry, true);