From 3e5d8813160c5c0ce1dfb4fdf32ae7ee3b068919 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Mon, 23 Nov 2009 09:42:38 +0100 Subject: [PATCH] Bugfix: Resize client after updating base_height/base_width (Thanks Merovius) This fixes the problem that urxvt/xterm "lost" a line of space before being resized the first time. --- src/handlers.c | 9 +++++++-- src/layout.c | 8 ++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/handlers.c b/src/handlers.c index cc6066b5..feacd16b 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -887,8 +887,13 @@ int handle_normal_hints(void *data, xcb_connection_t *conn, uint8_t state, xcb_w base_height = size_hints.min_height; } - client->base_width = base_width; - client->base_height = base_height; + if (base_width != client->base_width || + base_height != client->base_height) { + client->base_width = base_width; + client->base_height = base_height; + LOG("client's base_height changed to %d\n", base_height); + resize_client(conn, client); + } /* If no aspect ratio was set or if it was invalid, we ignore the hints */ if (!(size_hints.flags & XCB_SIZE_HINT_P_ASPECT) || diff --git a/src/layout.c b/src/layout.c index f186bbae..164f6875 100644 --- a/src/layout.c +++ b/src/layout.c @@ -329,15 +329,15 @@ void resize_client(xcb_connection_t *conn, Client *client) { if (client->height_increment > 1) { int old_height = rect->height; rect->height -= (rect->height - client->base_height) % client->height_increment; - LOG("Lost %d pixel due to client's height_increment (%d px)\n", - old_height - rect->height, client->height_increment); + LOG("Lost %d pixel due to client's height_increment (%d px, base_height = %d)\n", + old_height - rect->height, client->height_increment, client->base_height); } if (client->width_increment > 1) { int old_width = rect->width; rect->width -= (rect->width - client->base_width) % client->width_increment; - LOG("Lost %d pixel due to client's width_increment (%d px)\n", - old_width - rect->width, client->width_increment); + LOG("Lost %d pixel due to client's width_increment (%d px, base_width = %d)\n", + old_width - rect->width, client->width_increment, client->base_width); } LOG("child will be at %dx%d with size %dx%d\n", rect->x, rect->y, rect->width, rect->height); -- 2.39.5