Preserve floating geometry across fullscreen exit
fa20417bdb91058478e414659afb2019f1cb1924
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(); |