Preserve floating geometry across fullscreen exit

fa20417bdb91058478e414659afb2019f1cb1924
Alexis Sellier committed ago 1 parent ba77c16e
swm.c +1 -1
4059 4059
        state_field(state->title, client_get_title(c));
4060 4060
        wl_list_insert(window_states.prev, &state->link);
4061 4061
    } else if (!state->title[0]) {
4062 4062
        state_field(state->title, client_get_title(c));
4063 4063
    }
4064 -
    state->geom = c->geom;
4064 +
    state->geom = c->is_fullscreen ? c->prev : c->geom;
4065 4065
    save_window_states();
4066 4066
}
4067 4067
4068 4068
/* Remove a window's saved geometry. */
4069 4069
void forget_client(client_t *c) {
test/unit.c +6 -0
473 473
    assert(state);
474 474
    assert(!strcmp(state->appid, "org.test app"));
475 475
    assert(!strcmp(state->title, "Window Title"));
476 476
    assert(state->geom.x == 11 && state->geom.height == 480);
477 477
478 +
    client.is_fullscreen = 1;
479 +
    client.prev          = client.geom;
480 +
    client.geom          = (struct wlr_box){ 0, 0, 1920, 1080 };
481 +
    remember_client(&client);
482 +
    assert(wlr_box_equal(&state->geom, &client.prev));
483 +
478 484
    snprintf(filepath, sizeof(filepath), "%s/swm/windows", statehome);
479 485
    file = fopen(filepath, "r");
480 486
    assert(file);
481 487
    assert(fclose(file) == 0);
482 488
    clear_window_states();