From 036728c4d78f82cabb2cdd196028018ad1a48bbc Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Tue, 2 Jun 2009 14:24:37 +0200 Subject: [PATCH] Use the size when mapping the window as size for floating (correct size for tool windows) --- src/floating.c | 17 +++++++++++++---- src/handlers.c | 1 + src/manage.c | 5 +++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/floating.c b/src/floating.c index 9c71cf36..181fbe34 100644 --- a/src/floating.c +++ b/src/floating.c @@ -96,13 +96,22 @@ void toggle_floating_mode(xcb_connection_t *conn, Client *client, bool automatic else client->floating = FLOATING_USER_ON; /* Initialize the floating position from the position in tiling mode, if this - * client never was floating (width == 0) */ - if (client->floating_rect.width == 0) { - memcpy(&(client->floating_rect), &(client->rect), sizeof(Rect)); - LOG("(%d, %d) size (%d, %d)\n", client->floating_rect.x, client->floating_rect.y, + * client never was floating (x == -1) */ + if (client->floating_rect.x == -1) { + /* Copy over the position */ + client->floating_rect.x = client->rect.x; + client->floating_rect.y = client->rect.y; + + /* Copy the size the other direction */ + client->rect.width = client->floating_rect.width; + client->rect.height = client->floating_rect.height; + + LOG("copying size from tiling (%d, %d) size (%d, %d)\n", client->floating_rect.x, client->floating_rect.y, client->floating_rect.width, client->floating_rect.height); } else { /* If the client was already in floating before we restore the old position / size */ + LOG("using: (%d, %d) size (%d, %d)\n", client->floating_rect.x, client->floating_rect.y, + client->floating_rect.width, client->floating_rect.height); memcpy(&(client->rect), &(client->floating_rect), sizeof(Rect)); } diff --git a/src/handlers.c b/src/handlers.c index cdc735e4..92ad73cb 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -874,6 +874,7 @@ int handle_normal_hints(void *data, xcb_connection_t *conn, uint8_t state, xcb_w return 1; } xcb_size_hints_t size_hints; + LOG("client is %08x / child %08x\n", client->frame, client->child); /* If the hints were already in this event, use them, if not, request them */ if (reply != NULL) diff --git a/src/manage.c b/src/manage.c index c87de575..9a26f214 100644 --- a/src/manage.c +++ b/src/manage.c @@ -159,6 +159,7 @@ void reparent_window(xcb_connection_t *conn, xcb_window_t child, assert(new == NULL); LOG("reparenting new client\n"); + LOG("x = %d, y = %d, width = %d, height = %d\n", x, y, width, height); new = calloc(sizeof(Client), 1); new->force_reconfigure = true; @@ -172,6 +173,10 @@ void reparent_window(xcb_connection_t *conn, xcb_window_t child, new->child = child; new->rect.width = width; new->rect.height = height; + /* Pre-initialize the values for floating */ + new->floating_rect.x = -1; + new->floating_rect.width = width; + new->floating_rect.height = height; mask = 0; -- 2.39.5