refactor: simplify NativeWindow::FullScreenTransitionState (#46918)

* refactor: make NativeWindow::fullscreen_transition_state_ private

* refactor: add NativeWindow::is_transitioning_fullscreen() helper

* refactor: remove unused NativeWindow::fullscreen_transition_state()

* refactor: replace NativeWindow::set_fullscreen_transition_state() with NativeWindow::set_is_transitioning_fullscreen()

refactor: remove unused NativeWindow::FullScreenTransitionState
This commit is contained in:
Charles Kerr 2025-05-05 09:28:29 -05:00 committed by GitHub
commit 2e2776611f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 18 additions and 25 deletions

View file

@ -3961,8 +3961,7 @@ bool WebContents::IsFullscreenForTabOrPending(
if (!owner_window()) if (!owner_window())
return is_html_fullscreen(); return is_html_fullscreen();
bool in_transition = owner_window()->fullscreen_transition_state() != const bool in_transition = owner_window()->is_transitioning_fullscreen();
NativeWindow::FullScreenTransitionState::kNone;
bool is_html_transition = owner_window()->fullscreen_transition_type() == bool is_html_transition = owner_window()->fullscreen_transition_type() ==
NativeWindow::FullScreenTransitionType::kHTML; NativeWindow::FullScreenTransitionType::kHTML;

View file

@ -355,13 +355,12 @@ class NativeWindow : public base::SupportsUserData,
// Handle fullscreen transitions. // Handle fullscreen transitions.
void HandlePendingFullscreenTransitions(); void HandlePendingFullscreenTransitions();
enum class FullScreenTransitionState { kEntering, kExiting, kNone }; constexpr void set_is_transitioning_fullscreen(const bool val) {
is_transitioning_fullscreen_ = val;
void set_fullscreen_transition_state(FullScreenTransitionState state) {
fullscreen_transition_state_ = state;
} }
FullScreenTransitionState fullscreen_transition_state() const {
return fullscreen_transition_state_; [[nodiscard]] constexpr bool is_transitioning_fullscreen() const {
return is_transitioning_fullscreen_;
} }
enum class FullScreenTransitionType { kHTML, kNative, kNone }; enum class FullScreenTransitionType { kHTML, kNative, kNone };
@ -473,8 +472,6 @@ class NativeWindow : public base::SupportsUserData,
std::optional<extensions::SizeConstraints> content_size_constraints_; std::optional<extensions::SizeConstraints> content_size_constraints_;
std::queue<bool> pending_transitions_; std::queue<bool> pending_transitions_;
FullScreenTransitionState fullscreen_transition_state_ =
FullScreenTransitionState::kNone;
FullScreenTransitionType fullscreen_transition_type_ = FullScreenTransitionType fullscreen_transition_type_ =
FullScreenTransitionType::kNone; FullScreenTransitionType::kNone;
@ -522,6 +519,8 @@ class NativeWindow : public base::SupportsUserData,
// Is this a modal window. // Is this a modal window.
bool is_modal_ = false; bool is_modal_ = false;
bool is_transitioning_fullscreen_ = false;
std::list<DraggableRegionProvider*> draggable_region_providers_; std::list<DraggableRegionProvider*> draggable_region_providers_;
// Observers of this window. // Observers of this window.

View file

@ -331,7 +331,7 @@ void NativeWindowMac::SetContentView(views::View* view) {
} }
void NativeWindowMac::CloseImpl() { void NativeWindowMac::CloseImpl() {
if (fullscreen_transition_state() != FullScreenTransitionState::kNone) { if (is_transitioning_fullscreen()) {
SetHasDeferredWindowClose(true); SetHasDeferredWindowClose(true);
return; return;
} }
@ -623,7 +623,7 @@ void NativeWindowMac::SetFullScreen(bool fullscreen) {
// that it's possible to call it while a fullscreen transition is currently // that it's possible to call it while a fullscreen transition is currently
// in process. This can create weird behavior (incl. phantom windows), // in process. This can create weird behavior (incl. phantom windows),
// so we want to schedule a transition for when the current one has completed. // so we want to schedule a transition for when the current one has completed.
if (fullscreen_transition_state() != FullScreenTransitionState::kNone) { if (is_transitioning_fullscreen()) {
if (!pending_transitions_.empty()) { if (!pending_transitions_.empty()) {
bool last_pending = pending_transitions_.back(); bool last_pending = pending_transitions_.back();
// Only push new transitions if they're different than the last transition // Only push new transitions if they're different than the last transition
@ -647,12 +647,10 @@ void NativeWindowMac::SetFullScreen(bool fullscreen) {
// SetFullScreen is called by a user before windowWillEnterFullScreen // SetFullScreen is called by a user before windowWillEnterFullScreen
// or windowWillExitFullScreen are invoked, and so a potential transition // or windowWillExitFullScreen are invoked, and so a potential transition
// could be dropped. // could be dropped.
fullscreen_transition_state_ = fullscreen set_is_transitioning_fullscreen(true);
? FullScreenTransitionState::kEntering
: FullScreenTransitionState::kExiting;
if (![window_ toggleFullScreenMode:nil]) if (![window_ toggleFullScreenMode:nil])
fullscreen_transition_state_ = FullScreenTransitionState::kNone; set_is_transitioning_fullscreen(false);
} }
bool NativeWindowMac::IsFullscreen() const { bool NativeWindowMac::IsFullscreen() const {
@ -780,8 +778,7 @@ void NativeWindowMac::SetResizable(bool resizable) {
} }
bool NativeWindowMac::IsResizable() const { bool NativeWindowMac::IsResizable() const {
bool in_fs_transition = const bool in_fs_transition = is_transitioning_fullscreen();
fullscreen_transition_state() != FullScreenTransitionState::kNone;
bool has_rs_mask = HasStyleMask(NSWindowStyleMaskResizable); bool has_rs_mask = HasStyleMask(NSWindowStyleMaskResizable);
return has_rs_mask && !IsFullscreen() && !in_fs_transition; return has_rs_mask && !IsFullscreen() && !in_fs_transition;
} }

View file

@ -18,8 +18,6 @@
#include "ui/views/widget/native_widget_mac.h" #include "ui/views/widget/native_widget_mac.h"
using TitleBarStyle = electron::NativeWindowMac::TitleBarStyle; using TitleBarStyle = electron::NativeWindowMac::TitleBarStyle;
using FullScreenTransitionState =
electron::NativeWindow::FullScreenTransitionState;
@implementation ElectronNSWindowDelegate @implementation ElectronNSWindowDelegate
@ -302,7 +300,7 @@ using FullScreenTransitionState =
// Store resizable mask so it can be restored after exiting fullscreen. // Store resizable mask so it can be restored after exiting fullscreen.
is_resizable_ = shell_->HasStyleMask(NSWindowStyleMaskResizable); is_resizable_ = shell_->HasStyleMask(NSWindowStyleMaskResizable);
shell_->set_fullscreen_transition_state(FullScreenTransitionState::kEntering); shell_->set_is_transitioning_fullscreen(true);
shell_->NotifyWindowWillEnterFullScreen(); shell_->NotifyWindowWillEnterFullScreen();
@ -311,7 +309,7 @@ using FullScreenTransitionState =
} }
- (void)windowDidEnterFullScreen:(NSNotification*)notification { - (void)windowDidEnterFullScreen:(NSNotification*)notification {
shell_->set_fullscreen_transition_state(FullScreenTransitionState::kNone); shell_->set_is_transitioning_fullscreen(false);
shell_->NotifyWindowEnterFullScreen(); shell_->NotifyWindowEnterFullScreen();
@ -322,7 +320,7 @@ using FullScreenTransitionState =
} }
- (void)windowDidFailToEnterFullScreen:(NSWindow*)window { - (void)windowDidFailToEnterFullScreen:(NSWindow*)window {
shell_->set_fullscreen_transition_state(FullScreenTransitionState::kNone); shell_->set_is_transitioning_fullscreen(false);
shell_->SetResizable(is_resizable_); shell_->SetResizable(is_resizable_);
shell_->NotifyWindowDidFailToEnterFullScreen(); shell_->NotifyWindowDidFailToEnterFullScreen();
@ -334,13 +332,13 @@ using FullScreenTransitionState =
} }
- (void)windowWillExitFullScreen:(NSNotification*)notification { - (void)windowWillExitFullScreen:(NSNotification*)notification {
shell_->set_fullscreen_transition_state(FullScreenTransitionState::kExiting); shell_->set_is_transitioning_fullscreen(true);
shell_->NotifyWindowWillLeaveFullScreen(); shell_->NotifyWindowWillLeaveFullScreen();
} }
- (void)windowDidExitFullScreen:(NSNotification*)notification { - (void)windowDidExitFullScreen:(NSNotification*)notification {
shell_->set_fullscreen_transition_state(FullScreenTransitionState::kNone); shell_->set_is_transitioning_fullscreen(false);
shell_->SetResizable(is_resizable_); shell_->SetResizable(is_resizable_);
shell_->NotifyWindowLeaveFullScreen(); shell_->NotifyWindowLeaveFullScreen();