Preserve floating window size when saving max-layout state

d83cb3fa4bcf569ee6d47220427b542bf01ff6a5
Alexis Sellier committed ago 1 parent eece8b03
swm.c +1 -1
4195 4195
        state_field(state->title, client_get_title(c));
4196 4196
        wl_list_insert(window_states.prev, &state->link);
4197 4197
    } else if (!state->title[0]) {
4198 4198
        state_field(state->title, client_get_title(c));
4199 4199
    }
4200 -
    state->geom = c->is_fullscreen ? c->prev : c->geom;
4200 +
    state->geom = c->is_max_stacked ? c->maxstack_prev : c->is_fullscreen ? c->prev : c->geom;
4201 4201
    save_window_states();
4202 4202
}
4203 4203
4204 4204
/* Remove a window's saved geometry. */
4205 4205
void forget_client(client_t *c) {
test/unit.c +13 -1
511 511
    client.prev          = client.geom;
512 512
    client.geom          = (struct wlr_box){ 0, 0, 1920, 1080 };
513 513
    remember_client(&client);
514 514
    assert(wlr_box_equal(&state->geom, &client.prev));
515 515
516 +
    client.is_fullscreen  = false;
517 +
    client.is_max_stacked = true;
518 +
    client.maxstack_prev  = client.prev;
519 +
    remember_client(&client);
520 +
    assert(wlr_box_equal(&state->geom, &client.maxstack_prev));
521 +
522 +
    client.is_fullscreen = true;
523 +
    client.prev          = client.geom;
524 +
    remember_client(&client);
525 +
    assert(wlr_box_equal(&state->geom, &client.maxstack_prev));
526 +
516 527
    snprintf(filepath, sizeof(filepath), "%s/swm/windows", statehome);
517 528
    file = fopen(filepath, "r");
518 529
    assert(file);
519 530
    assert(fclose(file) == 0);
520 531
    clear_window_states();
521 532
    load_window_states();
522 -
    assert(find_window_state(&client));
533 +
    state = find_window_state(&client);
534 +
    assert(state && wlr_box_equal(&state->geom, &client.maxstack_prev));
523 535
    forget_client(&client);
524 536
    assert(find_window_state(&client) == nullptr);
525 537
526 538
    file = fopen(filepath, "w");
527 539
    assert(file);