From c5da7bd266391bb0be5500ddfc6f5b154852869c Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Wed, 18 Nov 2009 22:53:17 +0100 Subject: [PATCH] Bugfix: Fix resizing of floating windows in borderless/1-px-border mode (Thanks Grauwolf) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Calculations were wrong (they simply didn’t take into account that there is more than one border style, the code was from before we implemented that…). We cannot directly set child_rect to the coordinates as resize_client takes rect and calculates the child_rect, so we need the new lines of code for this bugfix in any case (rect needs to be updated). --- src/handlers.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/handlers.c b/src/handlers.c index af541e6c..56be49ce 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -342,15 +342,34 @@ int handle_configure_request(void *prophs, xcb_connection_t *conn, xcb_configure /* Floating clients can be reconfigured */ if (client_is_floating(client)) { i3Font *font = load_font(conn, config.font); + int mode = (client->container != NULL ? client->container->mode : MODE_DEFAULT); if (event->value_mask & XCB_CONFIG_WINDOW_X) client->rect.x = event->x; if (event->value_mask & XCB_CONFIG_WINDOW_Y) client->rect.y = event->y; - if (event->value_mask & XCB_CONFIG_WINDOW_WIDTH) - client->rect.width = event->width + 2 + 2; - if (event->value_mask & XCB_CONFIG_WINDOW_HEIGHT) - client->rect.height = event->height + (font->height + 2 + 2) + 2; + if (event->value_mask & XCB_CONFIG_WINDOW_WIDTH) { + if (mode == MODE_STACK || mode == MODE_TABBED) { + client->rect.width = event->width + 2 + 2; + } else { + if (client->titlebar_position == TITLEBAR_OFF && client->borderless) + client->rect.width = event->width; + else if (client->titlebar_position == TITLEBAR_OFF && !client->borderless) + client->rect.width = event->width + (1 + 1); + else client->rect.width = event->width + (2 + 2); + } + } + if (event->value_mask & XCB_CONFIG_WINDOW_HEIGHT) { + if (mode == MODE_STACK || mode == MODE_TABBED) { + client->rect.height = event->height + 2; + } else { + if (client->titlebar_position == TITLEBAR_OFF && client->borderless) + client->rect.height = event->height; + else if (client->titlebar_position == TITLEBAR_OFF && !client->borderless) + client->rect.height = event->height + (1 + 1); + else client->rect.height = event->height + (font->height + 2 + 2) + 2; + } + } LOG("Accepted new position/size for floating client: (%d, %d) size %d x %d\n", client->rect.x, client->rect.y, client->rect.width, client->rect.height); -- 2.39.5