From 2a966014a77fab13d8cd0136ab6fcca0c6e48a1a 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 d42c1b72..d666641e 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -340,15 +340,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