macOS: Make set_simple_fullscreen honor set_borderless_game (#4164)

* Prevent panic when calling set_simple_fullscreen(false) on macos

Calling `set_simple_fullscreen(false)` to restore the window after
a previous call to `set_simple_fullscreen(true)` panics with
`view must be installed in a window` in the call to `set_style_mask`
with the old style.

Moving the `set_style_mask` call after the frame has been resized
fixes the issue.

* Hide the doc and menubar on macos when using set_borderless_game
with set_simple_fullscreen
This commit is contained in:
aloucks 2025-03-16 21:58:47 -04:00 committed by GitHub
parent 2b4e8ef916
commit ef37b1d5dd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 12 additions and 4 deletions

View file

@ -1874,8 +1874,13 @@ impl WindowExtMacOS for WindowDelegate {
self.ivars().is_simple_fullscreen.set(true);
// Simulate pre-Lion fullscreen by hiding the dock and menu bar
let presentation_options = NSApplicationPresentationOptions::AutoHideDock
| NSApplicationPresentationOptions::AutoHideMenuBar;
let presentation_options = if self.is_borderless_game() {
NSApplicationPresentationOptions::HideDock
| NSApplicationPresentationOptions::HideMenuBar
} else {
NSApplicationPresentationOptions::AutoHideDock
| NSApplicationPresentationOptions::AutoHideMenuBar
};
app.setPresentationOptions(presentation_options);
// Hide the titlebar
@ -1896,7 +1901,6 @@ impl WindowExtMacOS for WindowDelegate {
self.window().setMovable(false);
} else {
let new_mask = self.saved_style();
self.set_style_mask(new_mask);
self.ivars().is_simple_fullscreen.set(false);
let save_presentation_opts = self.ivars().save_presentation_opts.get();
@ -1919,6 +1923,7 @@ impl WindowExtMacOS for WindowDelegate {
self.window().setFrame_display(frame, true);
self.window().setMovable(true);
self.set_style_mask(new_mask);
}
true