From: Michael Stapelberg Date: Wed, 18 Nov 2009 21:53:17 +0000 (+0100) Subject: Bugfix: Fix resizing of floating windows in borderless/1-px-border mode (Thanks Grauwolf) X-Git-Tag: 3.d-bf1~19 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2a966014a77fab13d8cd0136ab6fcca0c6e48a1a;p=i3%2Fi3 Bugfix: Fix resizing of floating windows in borderless/1-px-border mode (Thanks Grauwolf) 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). --- 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);