Implement invalidate for non-offscreen mode
authorGary Wilber <Spacetech326@gmail.com>
Wed, 8 Feb 2017 07:03:42 +0000 (23:03 -0800)
committerGary Wilber <Spacetech326@gmail.com>
Wed, 8 Feb 2017 07:03:42 +0000 (23:03 -0800)
atom/browser/api/atom_api_web_contents.cc

index 9d5c8f8..3605f80 100644 (file)
@@ -1489,13 +1489,20 @@ int WebContents::GetFrameRate() const {
 }
 
 void WebContents::Invalidate() {
-  if (!IsOffScreen())
-    return;
-
-  auto* osr_rwhv = static_cast<OffScreenRenderWidgetHostView*>(
-      web_contents()->GetRenderWidgetHostView());
-  if (osr_rwhv)
-    osr_rwhv->Invalidate();
+       if (IsOffScreen()) {
+               auto* osr_rwhv = static_cast<OffScreenRenderWidgetHostView*>(
+                       web_contents()->GetRenderWidgetHostView());
+               if (osr_rwhv)
+                       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()));
+               }
+       }
 }
 
 v8::Local<v8::Value> WebContents::GetWebPreferences(v8::Isolate* isolate) {