Serialize window maximized state in `WindowSettings` (#5554)

A user of my Windows application reported a papercut where the
application restores its size on next load, but does not restore its
maximized state. This PR fixes that.

To test, I patched https://github.com/emilk/eframe_template to use my
local code since I knew that template saves/restores window data.
Testing methodology was to simply `cargo run`, maximize the application,
then close the application. `cargo run` again and the application should
start maximized.

Closes #1517.

* [x] I have followed the instructions in the PR template
* * This is mostly true, I had difficulties running `./scripts/check.sh`
for some reason. Possibly a bad Python version?
This commit is contained in:
Lander Brandt 2025-01-06 00:19:17 -08:00 committed by GitHub
parent 6607cd95f9
commit 9073516e30
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 8 additions and 1 deletions

View File

@ -1824,6 +1824,9 @@ pub fn apply_viewport_builder_to_window(
let pos = PhysicalPosition::new(pixels_per_point * pos.x, pixels_per_point * pos.y); let pos = PhysicalPosition::new(pixels_per_point * pos.x, pixels_per_point * pos.y);
window.set_outer_position(pos); window.set_outer_position(pos);
} }
if let Some(maximized) = builder.maximized {
window.set_maximized(maximized);
}
} }
} }

View File

@ -13,6 +13,8 @@ pub struct WindowSettings {
fullscreen: bool, fullscreen: bool,
maximized: bool,
/// Inner size of window in logical pixels /// Inner size of window in logical pixels
inner_size_points: Option<egui::Vec2>, inner_size_points: Option<egui::Vec2>,
} }
@ -38,6 +40,7 @@ impl WindowSettings {
outer_position_pixels, outer_position_pixels,
fullscreen: window.fullscreen().is_some(), fullscreen: window.fullscreen().is_some(),
maximized: window.is_maximized(),
inner_size_points: Some(egui::vec2( inner_size_points: Some(egui::vec2(
inner_size_points.width, inner_size_points.width,
@ -80,7 +83,8 @@ impl WindowSettings {
if let Some(inner_size_points) = self.inner_size_points { if let Some(inner_size_points) = self.inner_size_points {
viewport_builder = viewport_builder viewport_builder = viewport_builder
.with_inner_size(inner_size_points) .with_inner_size(inner_size_points)
.with_fullscreen(self.fullscreen); .with_fullscreen(self.fullscreen)
.with_maximized(self.maximized);
} }
viewport_builder viewport_builder