Use the size when mapping the window as size for floating (correct size for tool windows)
This commit is contained in:
parent
3f925a56d3
commit
036728c4d7
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue