Use the size when mapping the window as size for floating (correct size for tool windows)

This commit is contained in:
Michael Stapelberg 2009-06-02 14:24:37 +02:00
parent 3f925a56d3
commit 036728c4d7
3 changed files with 19 additions and 4 deletions

View File

@ -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));
}

View File

@ -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)

View File

@ -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;