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:
parent
1f4f1b4afc
commit
2e2776611f
4 changed files with 18 additions and 25 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue