refactor: simplify NativeWindow::FullScreenTransitionState (36-x-y) (#46933)

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 13:54:00 -05:00 committed by GitHub
parent aada99e53d
commit c27bd7bb3c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 18 additions and 25 deletions

View file

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

View file

@ -362,13 +362,12 @@ class NativeWindow : public base::SupportsUserData,
// Handle fullscreen transitions.
void HandlePendingFullscreenTransitions();
enum class FullScreenTransitionState { kEntering, kExiting, kNone };
void set_fullscreen_transition_state(FullScreenTransitionState state) {
fullscreen_transition_state_ = state;
constexpr void set_is_transitioning_fullscreen(const bool val) {
is_transitioning_fullscreen_ = val;
}
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 };
@ -470,8 +469,6 @@ class NativeWindow : public base::SupportsUserData,
std::optional<extensions::SizeConstraints> content_size_constraints_;
std::queue<bool> pending_transitions_;
FullScreenTransitionState fullscreen_transition_state_ =
FullScreenTransitionState::kNone;
FullScreenTransitionType fullscreen_transition_type_ =
FullScreenTransitionType::kNone;
@ -519,6 +516,8 @@ class NativeWindow : public base::SupportsUserData,
// Is this a modal window.
bool is_modal_ = false;
bool is_transitioning_fullscreen_ = false;
std::list<DraggableRegionProvider*> draggable_region_providers_;
// Observers of this window.

View file

@ -336,7 +336,7 @@ void NativeWindowMac::Close() {
return;
}
if (fullscreen_transition_state() != FullScreenTransitionState::kNone) {
if (is_transitioning_fullscreen()) {
SetHasDeferredWindowClose(true);
return;
}
@ -628,7 +628,7 @@ void NativeWindowMac::SetFullScreen(bool fullscreen) {
// that it's possible to call it while a fullscreen transition is currently
// in process. This can create weird behavior (incl. phantom windows),
// 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()) {
bool last_pending = pending_transitions_.back();
// Only push new transitions if they're different than the last transition
@ -652,12 +652,10 @@ void NativeWindowMac::SetFullScreen(bool fullscreen) {
// SetFullScreen is called by a user before windowWillEnterFullScreen
// or windowWillExitFullScreen are invoked, and so a potential transition
// could be dropped.
fullscreen_transition_state_ = fullscreen
? FullScreenTransitionState::kEntering
: FullScreenTransitionState::kExiting;
set_is_transitioning_fullscreen(true);
if (![window_ toggleFullScreenMode:nil])
fullscreen_transition_state_ = FullScreenTransitionState::kNone;
set_is_transitioning_fullscreen(false);
}
bool NativeWindowMac::IsFullscreen() const {
@ -785,8 +783,7 @@ void NativeWindowMac::SetResizable(bool resizable) {
}
bool NativeWindowMac::IsResizable() const {
bool in_fs_transition =
fullscreen_transition_state() != FullScreenTransitionState::kNone;
const bool in_fs_transition = is_transitioning_fullscreen();
bool has_rs_mask = HasStyleMask(NSWindowStyleMaskResizable);
return has_rs_mask && !IsFullscreen() && !in_fs_transition;
}

View file

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