feat: add BrowserWindow.isOccluded() (#38982)

feat: add BrowserWindow.isOccluded()
This commit is contained in:
Shelley Vohr 2024-02-06 11:30:35 +01:00 committed by GitHub
parent 08236f7a9e
commit 768ece6b54
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 89 additions and 2 deletions

View file

@ -355,6 +355,10 @@ bool BaseWindow::IsVisible() const {
return window_->IsVisible();
}
bool BaseWindow::IsOccluded() const {
return window_->IsOccluded();
}
bool BaseWindow::IsEnabled() const {
return window_->IsEnabled();
}
@ -1086,6 +1090,7 @@ void BaseWindow::BuildPrototype(v8::Isolate* isolate,
.SetMethod("showInactive", &BaseWindow::ShowInactive)
.SetMethod("hide", &BaseWindow::Hide)
.SetMethod("isVisible", &BaseWindow::IsVisible)
.SetMethod("isOccluded", &BaseWindow::IsOccluded)
.SetMethod("isEnabled", &BaseWindow::IsEnabled)
.SetMethod("setEnabled", &BaseWindow::SetEnabled)
.SetMethod("maximize", &BaseWindow::Maximize)

View file

@ -98,6 +98,7 @@ class BaseWindow : public gin_helper::TrackableObject<BaseWindow>,
void ShowInactive();
void Hide();
bool IsVisible() const;
bool IsOccluded() const;
bool IsEnabled() const;
void SetEnabled(bool enable);
void Maximize();

View file

@ -87,6 +87,7 @@ class NativeWindow : public base::SupportsUserData,
virtual void Show() = 0;
virtual void ShowInactive() = 0;
virtual void Hide() = 0;
virtual bool IsOccluded() const = 0;
virtual bool IsVisible() const = 0;
virtual bool IsEnabled() const = 0;
virtual void SetEnabled(bool enable) = 0;

View file

@ -44,6 +44,7 @@ class NativeWindowMac : public NativeWindow,
void Show() override;
void ShowInactive() override;
void Hide() override;
bool IsOccluded() const override;
bool IsVisible() const override;
bool IsEnabled() const override;
void SetEnabled(bool enable) override;

View file

@ -561,9 +561,12 @@ void NativeWindowMac::Hide() {
[window_ orderOut:nil];
}
bool NativeWindowMac::IsOccluded() const {
return !([window_ occlusionState] & NSWindowOcclusionStateVisible);
}
bool NativeWindowMac::IsVisible() const {
bool occluded = [window_ occlusionState] == NSWindowOcclusionStateVisible;
return [window_ isVisible] && !occluded && !IsMinimized();
return [window_ isVisible] && !IsMinimized();
}
bool NativeWindowMac::IsEnabled() const {

View file

@ -562,6 +562,14 @@ void NativeWindowViews::Hide() {
#endif
}
bool NativeWindowViews::IsOccluded() const {
if (!GetNativeWindow())
return false;
auto occlusion_state =
GetNativeWindow()->GetHost()->GetNativeWindowOcclusionState();
return occlusion_state == aura::Window::OcclusionState::OCCLUDED;
}
bool NativeWindowViews::IsVisible() const {
#if BUILDFLAG(IS_WIN)
// widget()->IsVisible() calls ::IsWindowVisible, which returns non-zero if a

View file

@ -56,6 +56,7 @@ class NativeWindowViews : public NativeWindow,
void Hide() override;
bool IsVisible() const override;
bool IsEnabled() const override;
bool IsOccluded() const override;
void SetEnabled(bool enable) override;
void Maximize() override;
void Unmaximize() override;