Preserve floating window size when saving max-layout state
d83cb3fa4bcf569ee6d47220427b542bf01ff6a5
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); |