From cdb0540cf01106e712b9cac3d7e85583ef053497 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 14:50:23 +0200 Subject: [PATCH] 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> --- shell/browser/native_window_mac.h | 1 + shell/browser/native_window_mac.mm | 7 +++++++ .../browser/ui/cocoa/electron_ns_window_delegate.mm | 12 ++++++++++++ 3 files changed, 20 insertions(+) diff --git a/shell/browser/native_window_mac.h b/shell/browser/native_window_mac.h index 15180fc804a1..cf30bedeb71c 100644 --- a/shell/browser/native_window_mac.h +++ b/shell/browser/native_window_mac.h @@ -166,6 +166,7 @@ class NativeWindowMac : public NativeWindow, void DetachChildren() override; void NotifyWindowWillEnterFullScreen(); + void NotifyWindowDidFailToEnterFullScreen(); void NotifyWindowWillLeaveFullScreen(); // Cleanup observers when window is getting closed. Note that the destructor diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index 5682c88e04ee..29c6fd59731c 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -1664,6 +1664,13 @@ void NativeWindowMac::NotifyWindowWillEnterFullScreen() { UpdateVibrancyRadii(true); } +void NativeWindowMac::NotifyWindowDidFailToEnterFullScreen() { + UpdateVibrancyRadii(false); + + if (buttons_proxy_) + [buttons_proxy_ redraw]; +} + void NativeWindowMac::NotifyWindowWillLeaveFullScreen() { if (buttons_proxy_) { // Hide window title when leaving fullscreen. diff --git a/shell/browser/ui/cocoa/electron_ns_window_delegate.mm b/shell/browser/ui/cocoa/electron_ns_window_delegate.mm index e15687a942ee..d6af0ac6d9bb 100644 --- a/shell/browser/ui/cocoa/electron_ns_window_delegate.mm +++ b/shell/browser/ui/cocoa/electron_ns_window_delegate.mm @@ -311,6 +311,18 @@ using FullScreenTransitionState = 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 { shell_->set_fullscreen_transition_state(FullScreenTransitionState::kExiting);