diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 5ae6186a04ea..c90437372d7d 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -1496,12 +1496,8 @@ void WebContents::Invalidate() { osr_rwhv->Invalidate(); } else { const auto ownerWindow = owner_window(); - const auto nativeWindow = ownerWindow ? ownerWindow->GetNativeWindow() : - nullptr; - if (nativeWindow) { - const gfx::Rect& bounds = nativeWindow->bounds(); - nativeWindow->SchedulePaintInRect( - gfx::Rect(0, 0, bounds.width(), bounds.height())); + if (ownerWindow) { + ownerWindow->Invalidate(); } } } diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index 6f2d5254697d..aa5e7e0c7159 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -124,6 +124,7 @@ class NativeWindow : public base::SupportsUserData, std::string* error = nullptr) = 0; virtual bool IsAlwaysOnTop() = 0; virtual void Center() = 0; + virtual void Invalidate() = 0; virtual void SetTitle(const std::string& title) = 0; virtual std::string GetTitle() = 0; virtual void FlashFrame(bool flash) = 0; diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index 186051200a3e..2beb55c02964 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -71,6 +71,7 @@ class NativeWindowMac : public NativeWindow, int relativeLevel, std::string* error) override; bool IsAlwaysOnTop() override; void Center() override; + void Invalidate() override; void SetTitle(const std::string& title) override; std::string GetTitle() override; void FlashFrame(bool flash) override; diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index b463d2067c5a..cef80ceabf6c 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -1101,6 +1101,11 @@ void NativeWindowMac::Center() { [window_ center]; } +void NativeWindowMac::Invalidate() { + [window_ flushWindow]; + [[window_ contentView] setNeedsDisplay:TRUE]; +} + void NativeWindowMac::SetTitle(const std::string& title) { // For macOS <= 10.9, the setTitleVisibility API is not available, we have // to avoid calling setTitle for frameless window. diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index 3270add58356..64ed0611f3ba 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -695,6 +695,12 @@ void NativeWindowViews::Center() { window_->CenterWindow(GetSize()); } +void NativeWindowViews::Invalidate() { + const gfx::Rect& bounds = GetBounds(); + window_->SchedulePaintInRect( + gfx::Rect(0, 0, bounds.width(), bounds.height())); +} + void NativeWindowViews::SetTitle(const std::string& title) { title_ = title; window_->UpdateWindowTitle(); diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h index 7d983b89a573..a7f02fb2727d 100644 --- a/atom/browser/native_window_views.h +++ b/atom/browser/native_window_views.h @@ -90,6 +90,7 @@ class NativeWindowViews : public NativeWindow, int relativeLevel, std::string* error) override; bool IsAlwaysOnTop() override; void Center() override; + void Invalidate() override; void SetTitle(const std::string& title) override; std::string GetTitle() override; void FlashFrame(bool flash) override;