fix: handle failing to enter fullscreen on macOS (#43154)

* fix: handle failing to enter/exit fullscreen on macOS

On macOS, failing to enter/exit fullscreen can fail. If this happens,
properly restore the original window state.

Co-authored-by: cptpcrd <31829097+cptpcrd@users.noreply.github.com>

* refactor: remove fail to exit fullscreen handlers

Seem to be unnecessary since the window exits fullscreen anyway.

Co-authored-by: cptpcrd <31829097+cptpcrd@users.noreply.github.com>

---------

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: cptpcrd <31829097+cptpcrd@users.noreply.github.com>
This commit is contained in:
trop[bot] 2024-08-01 14:50:23 +02:00 committed by GitHub
parent 832090d01c
commit cdb0540cf0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 20 additions and 0 deletions

View file

@ -166,6 +166,7 @@ class NativeWindowMac : public NativeWindow,
void DetachChildren() override; void DetachChildren() override;
void NotifyWindowWillEnterFullScreen(); void NotifyWindowWillEnterFullScreen();
void NotifyWindowDidFailToEnterFullScreen();
void NotifyWindowWillLeaveFullScreen(); void NotifyWindowWillLeaveFullScreen();
// Cleanup observers when window is getting closed. Note that the destructor // Cleanup observers when window is getting closed. Note that the destructor

View file

@ -1664,6 +1664,13 @@ void NativeWindowMac::NotifyWindowWillEnterFullScreen() {
UpdateVibrancyRadii(true); UpdateVibrancyRadii(true);
} }
void NativeWindowMac::NotifyWindowDidFailToEnterFullScreen() {
UpdateVibrancyRadii(false);
if (buttons_proxy_)
[buttons_proxy_ redraw];
}
void NativeWindowMac::NotifyWindowWillLeaveFullScreen() { void NativeWindowMac::NotifyWindowWillLeaveFullScreen() {
if (buttons_proxy_) { if (buttons_proxy_) {
// Hide window title when leaving fullscreen. // Hide window title when leaving fullscreen.

View file

@ -311,6 +311,18 @@ using FullScreenTransitionState =
shell_->HandlePendingFullscreenTransitions(); shell_->HandlePendingFullscreenTransitions();
} }
- (void)windowDidFailToEnterFullScreen:(NSWindow*)window {
shell_->set_fullscreen_transition_state(FullScreenTransitionState::kNone);
shell_->SetResizable(is_resizable_);
shell_->NotifyWindowDidFailToEnterFullScreen();
if (shell_->HandleDeferredClose())
return;
shell_->HandlePendingFullscreenTransitions();
}
- (void)windowWillExitFullScreen:(NSNotification*)notification { - (void)windowWillExitFullScreen:(NSNotification*)notification {
shell_->set_fullscreen_transition_state(FullScreenTransitionState::kExiting); shell_->set_fullscreen_transition_state(FullScreenTransitionState::kExiting);