fix: macOS modal focus (#24286)
This commit is contained in:
parent
d9d07c65b2
commit
af4876296c
6 changed files with 35 additions and 10 deletions
|
@ -284,22 +284,14 @@ void BrowserWindow::OnWindowClosed() {
|
|||
|
||||
void BrowserWindow::OnWindowBlur() {
|
||||
web_contents()->StoreFocus();
|
||||
#if defined(OS_MACOSX)
|
||||
auto* rwhv = web_contents()->GetRenderWidgetHostView();
|
||||
if (rwhv)
|
||||
rwhv->SetActive(false);
|
||||
#endif
|
||||
|
||||
BaseWindow::OnWindowBlur();
|
||||
}
|
||||
|
||||
void BrowserWindow::OnWindowFocus() {
|
||||
web_contents()->RestoreFocus();
|
||||
#if defined(OS_MACOSX)
|
||||
auto* rwhv = web_contents()->GetRenderWidgetHostView();
|
||||
if (rwhv)
|
||||
rwhv->SetActive(true);
|
||||
#else
|
||||
|
||||
#if !defined(OS_MACOSX)
|
||||
if (!api_web_contents_->IsDevToolsOpened())
|
||||
web_contents()->Focus();
|
||||
#endif
|
||||
|
@ -307,6 +299,14 @@ void BrowserWindow::OnWindowFocus() {
|
|||
BaseWindow::OnWindowFocus();
|
||||
}
|
||||
|
||||
void BrowserWindow::OnWindowIsKeyChanged(bool is_key) {
|
||||
#if defined(OS_MACOSX)
|
||||
auto* rwhv = web_contents()->GetRenderWidgetHostView();
|
||||
if (rwhv)
|
||||
rwhv->SetActive(is_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
void BrowserWindow::OnWindowResize() {
|
||||
#if defined(OS_MACOSX)
|
||||
if (!draggable_regions_.empty())
|
||||
|
|
|
@ -66,6 +66,7 @@ class BrowserWindow : public BaseWindow,
|
|||
// NativeWindowObserver:
|
||||
void RequestPreferredWidth(int* width) override;
|
||||
void OnCloseButtonClicked(bool* prevent_default) override;
|
||||
void OnWindowIsKeyChanged(bool is_key) override;
|
||||
|
||||
// BaseWindow:
|
||||
void OnWindowClosed() override;
|
||||
|
|
|
@ -439,6 +439,11 @@ void NativeWindow::NotifyWindowFocus() {
|
|||
observer.OnWindowFocus();
|
||||
}
|
||||
|
||||
void NativeWindow::NotifyWindowIsKeyChanged(bool is_key) {
|
||||
for (NativeWindowObserver& observer : observers_)
|
||||
observer.OnWindowIsKeyChanged(is_key);
|
||||
}
|
||||
|
||||
void NativeWindow::NotifyWindowShow() {
|
||||
for (NativeWindowObserver& observer : observers_)
|
||||
observer.OnWindowShow();
|
||||
|
|
|
@ -257,6 +257,7 @@ class NativeWindow : public base::SupportsUserData,
|
|||
void NotifyWindowBlur();
|
||||
void NotifyWindowFocus();
|
||||
void NotifyWindowShow();
|
||||
void NotifyWindowIsKeyChanged(bool is_key);
|
||||
void NotifyWindowHide();
|
||||
void NotifyWindowMaximize();
|
||||
void NotifyWindowUnmaximize();
|
||||
|
|
|
@ -57,6 +57,9 @@ class NativeWindowObserver : public base::CheckedObserver {
|
|||
// Called when window gains focus.
|
||||
virtual void OnWindowFocus() {}
|
||||
|
||||
// Called when window gained or lost key window status.
|
||||
virtual void OnWindowIsKeyChanged(bool is_key) {}
|
||||
|
||||
// Called when window is shown.
|
||||
virtual void OnWindowShow() {}
|
||||
|
||||
|
|
|
@ -97,6 +97,21 @@ using TitleBarStyle = electron::NativeWindowMac::TitleBarStyle;
|
|||
shell_->NotifyWindowBlur();
|
||||
}
|
||||
|
||||
- (void)windowDidBecomeKey:(NSNotification*)notification {
|
||||
shell_->NotifyWindowIsKeyChanged(true);
|
||||
}
|
||||
|
||||
- (void)windowDidResignKey:(NSNotification*)notification {
|
||||
// If our app is still active and we're still the key window, ignore this
|
||||
// message, since it just means that a menu extra (on the "system status bar")
|
||||
// was activated; we'll get another |-windowDidResignKey| if we ever really
|
||||
// lose key window status.
|
||||
if ([NSApp isActive] && ([NSApp keyWindow] == [notification object]))
|
||||
return;
|
||||
|
||||
shell_->NotifyWindowIsKeyChanged(false);
|
||||
}
|
||||
|
||||
- (NSSize)windowWillResize:(NSWindow*)sender toSize:(NSSize)frameSize {
|
||||
NSSize newSize = frameSize;
|
||||
double aspectRatio = shell_->GetAspectRatio();
|
||||
|
|
Loading…
Reference in a new issue