diff options
-rw-r--r-- | chrome/renderer/render_widget.h | 1 | ||||
-rw-r--r-- | webkit/glue/webview_impl.cc | 7 | ||||
-rw-r--r-- | webkit/glue/webview_impl.h | 1 | ||||
-rw-r--r-- | webkit/glue/webwidget_delegate.h | 3 | ||||
-rw-r--r-- | webkit/glue/webwidget_impl.cc | 6 | ||||
-rw-r--r-- | webkit/glue/webwidget_impl.h | 1 | ||||
-rw-r--r-- | webkit/port/platform/ScrollViewWin.cpp | 8 | ||||
-rw-r--r-- | webkit/port/platform/WidgetClientWin.h | 3 |
8 files changed, 27 insertions, 3 deletions
diff --git a/chrome/renderer/render_widget.h b/chrome/renderer/render_widget.h index c9bdc39..98d0377 100644 --- a/chrome/renderer/render_widget.h +++ b/chrome/renderer/render_widget.h @@ -76,6 +76,7 @@ class RenderWidget : public IPC::Channel::Listener, virtual void GetRootWindowRect(WebWidget* webwidget, gfx::Rect* rect); virtual void DidMove(WebWidget* webwidget, const WebPluginGeometry& move); virtual void RunModal(WebWidget* webwidget) {} + virtual bool IsHidden() { return is_hidden_; } // Close the underlying WebWidget. void Close(); diff --git a/webkit/glue/webview_impl.cc b/webkit/glue/webview_impl.cc index 85ef80d..ca86104 100644 --- a/webkit/glue/webview_impl.cc +++ b/webkit/glue/webview_impl.cc @@ -1469,6 +1469,13 @@ size_t WebViewImpl::getActiveTickmarkIndex(WebCore::Frame* frame) { return webframe_impl->active_tickmark_index(); } +bool WebViewImpl::isHidden() { + if (!delegate_) + return true; + + return delegate_->IsHidden(); +} + //----------------------------------------------------------------------------- // WebCore::BackForwardListClient diff --git a/webkit/glue/webview_impl.h b/webkit/glue/webview_impl.h index 1fb2ebb..ebe9e14 100644 --- a/webkit/glue/webview_impl.h +++ b/webkit/glue/webview_impl.h @@ -203,6 +203,7 @@ class WebViewImpl : public WebView, virtual const WTF::Vector<RefPtr<WebCore::Range> >* getTickmarks( WebCore::Frame* frame); virtual size_t getActiveTickmarkIndex(WebCore::Frame* frame); + virtual bool isHidden(); // WebCore::BackForwardListClient virtual void didAddHistoryItem(WebCore::HistoryItem* item); diff --git a/webkit/glue/webwidget_delegate.h b/webkit/glue/webwidget_delegate.h index faf4d0a..45d0dcc 100644 --- a/webkit/glue/webwidget_delegate.h +++ b/webkit/glue/webwidget_delegate.h @@ -79,6 +79,9 @@ class WebWidgetDelegate { virtual void AddRef() = 0; virtual void Release() = 0; + // Returns true if the widget is in a background tab. + virtual bool IsHidden() = 0; + WebWidgetDelegate() { } virtual ~WebWidgetDelegate() { } diff --git a/webkit/glue/webwidget_impl.cc b/webkit/glue/webwidget_impl.cc index 36952e0..eb7870a 100644 --- a/webkit/glue/webwidget_impl.cc +++ b/webkit/glue/webwidget_impl.cc @@ -252,3 +252,9 @@ void WebWidgetImpl::setFocus() { delegate_->Focus(this); } +bool WebWidgetImpl::isHidden() { + if (!delegate_) + return true; + + return delegate_->IsHidden(); +} diff --git a/webkit/glue/webwidget_impl.h b/webkit/glue/webwidget_impl.h index 5c706a7..ddb4fde 100644 --- a/webkit/glue/webwidget_impl.h +++ b/webkit/glue/webwidget_impl.h @@ -85,6 +85,7 @@ class WebWidgetImpl : public WebWidget, public WebCore::WidgetClientWin { virtual const WTF::Vector<RefPtr<WebCore::Range> >* getTickmarks( WebCore::Frame* frame); virtual size_t getActiveTickmarkIndex(WebCore::Frame* frame); + virtual bool isHidden(); WebWidgetDelegate* delegate_; gfx::Size size_; diff --git a/webkit/port/platform/ScrollViewWin.cpp b/webkit/port/platform/ScrollViewWin.cpp index 6964f82..2a7ebbc 100644 --- a/webkit/port/platform/ScrollViewWin.cpp +++ b/webkit/port/platform/ScrollViewWin.cpp @@ -1128,9 +1128,11 @@ void ScrollView::updateBackingStore() bool ScrollView::inWindow() const { - // Needed for back/forward cache. - notImplemented(); - return true; + WidgetClientWin* c = static_cast<WidgetClientWin*>(client()); + if (!c) + return false; + + return !c->isHidden(); } void ScrollView::attachToWindow() diff --git a/webkit/port/platform/WidgetClientWin.h b/webkit/port/platform/WidgetClientWin.h index 40355cc..48d1db5 100644 --- a/webkit/port/platform/WidgetClientWin.h +++ b/webkit/port/platform/WidgetClientWin.h @@ -65,6 +65,9 @@ public: // tickmark resides in another frame) this function returns kNoTickmark. static const size_t kNoTickmark = -1; virtual size_t getActiveTickmarkIndex(WebCore::Frame* frame) = 0; + + // Returns true if this widget is hidden because it's in a background tab. + virtual bool isHidden() = 0; }; } // namespace WebCore |