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