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:
parent
2b4e8ef916
commit
ef37b1d5dd
3 changed files with 12 additions and 4 deletions
|
|
@ -237,3 +237,4 @@ changelog entry.
|
||||||
- On macOS, fixed the scancode conversion for `IntlBackslash`.
|
- On macOS, fixed the scancode conversion for `IntlBackslash`.
|
||||||
- On macOS, fixed redundant `SurfaceResized` event at window creation.
|
- On macOS, fixed redundant `SurfaceResized` event at window creation.
|
||||||
- On Windows, fixed ~500 ms pause when clicking the title bar during continuous redraw.
|
- On Windows, fixed ~500 ms pause when clicking the title bar during continuous redraw.
|
||||||
|
- On macos, `WindowExtMacOS::set_simple_fullscreen` now honors `WindowExtMacOS::set_borderless_game`
|
||||||
|
|
|
||||||
|
|
@ -151,7 +151,9 @@ pub trait WindowExtMacOS {
|
||||||
/// Getter for the [`WindowExtMacOS::set_option_as_alt`].
|
/// Getter for the [`WindowExtMacOS::set_option_as_alt`].
|
||||||
fn option_as_alt(&self) -> OptionAsAlt;
|
fn option_as_alt(&self) -> OptionAsAlt;
|
||||||
|
|
||||||
/// Disable the Menu Bar and Dock in Borderless Fullscreen mode. Useful for games.
|
/// Disable the Menu Bar and Dock in Simple or Borderless Fullscreen mode. Useful for games.
|
||||||
|
/// The effect is applied when [`WindowExtMacOS::set_simple_fullscreen`] or
|
||||||
|
/// [`Window::set_fullscreen`] is called.
|
||||||
fn set_borderless_game(&self, borderless_game: bool);
|
fn set_borderless_game(&self, borderless_game: bool);
|
||||||
|
|
||||||
/// Getter for the [`WindowExtMacOS::set_borderless_game`].
|
/// Getter for the [`WindowExtMacOS::set_borderless_game`].
|
||||||
|
|
|
||||||
|
|
@ -1874,8 +1874,13 @@ impl WindowExtMacOS for WindowDelegate {
|
||||||
self.ivars().is_simple_fullscreen.set(true);
|
self.ivars().is_simple_fullscreen.set(true);
|
||||||
|
|
||||||
// Simulate pre-Lion fullscreen by hiding the dock and menu bar
|
// Simulate pre-Lion fullscreen by hiding the dock and menu bar
|
||||||
let presentation_options = NSApplicationPresentationOptions::AutoHideDock
|
let presentation_options = if self.is_borderless_game() {
|
||||||
| NSApplicationPresentationOptions::AutoHideMenuBar;
|
NSApplicationPresentationOptions::HideDock
|
||||||
|
| NSApplicationPresentationOptions::HideMenuBar
|
||||||
|
} else {
|
||||||
|
NSApplicationPresentationOptions::AutoHideDock
|
||||||
|
| NSApplicationPresentationOptions::AutoHideMenuBar
|
||||||
|
};
|
||||||
app.setPresentationOptions(presentation_options);
|
app.setPresentationOptions(presentation_options);
|
||||||
|
|
||||||
// Hide the titlebar
|
// Hide the titlebar
|
||||||
|
|
@ -1896,7 +1901,6 @@ impl WindowExtMacOS for WindowDelegate {
|
||||||
self.window().setMovable(false);
|
self.window().setMovable(false);
|
||||||
} else {
|
} else {
|
||||||
let new_mask = self.saved_style();
|
let new_mask = self.saved_style();
|
||||||
self.set_style_mask(new_mask);
|
|
||||||
self.ivars().is_simple_fullscreen.set(false);
|
self.ivars().is_simple_fullscreen.set(false);
|
||||||
|
|
||||||
let save_presentation_opts = self.ivars().save_presentation_opts.get();
|
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().setFrame_display(frame, true);
|
||||||
self.window().setMovable(true);
|
self.window().setMovable(true);
|
||||||
|
self.set_style_mask(new_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
true
|
true
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue