diff options
-rw-r--r-- | Source/WebCore/page/Page.cpp | 15 | ||||
-rw-r--r-- | Source/WebCore/page/Page.h | 4 | ||||
-rw-r--r-- | Source/WebCore/platform/qt/QWebPageClient.h | 1 | ||||
-rw-r--r-- | Source/WebCore/plugins/win/PluginViewWin.cpp | 23 | ||||
-rw-r--r-- | Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp | 7 | ||||
-rw-r--r-- | Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h | 2 | ||||
-rw-r--r-- | Source/WebKit/qt/WidgetApi/qgraphicswebview.cpp | 3 | ||||
-rw-r--r-- | Source/WebKit/qt/WidgetApi/qwebpage.cpp | 6 | ||||
-rw-r--r-- | Source/WebKit/qt/WidgetApi/qwebview.cpp | 4 | ||||
-rw-r--r-- | Source/WebKit/qt/WidgetSupport/PageClientQt.cpp | 10 | ||||
-rw-r--r-- | Source/WebKit/qt/WidgetSupport/PageClientQt.h | 2 |
11 files changed, 71 insertions, 6 deletions
diff --git a/Source/WebCore/page/Page.cpp b/Source/WebCore/page/Page.cpp index b4c963a4f..5319f8e0c 100644 --- a/Source/WebCore/page/Page.cpp +++ b/Source/WebCore/page/Page.cpp @@ -1242,6 +1242,21 @@ void Page::privateBrowsingStateChanged() pluginViewBases[i]->privateBrowsingStateChanged(privateBrowsingEnabled); } +#if PLATFORM(QT) +void Page::pluginVisibilityChanged(bool visible) +{ + Vector<RefPtr<PluginViewBase>, 32> pluginViewBases; + collectPluginViews(pluginViewBases); + + for (size_t i = 0; i < pluginViewBases.size(); ++i) { + if (visible) + pluginViewBases[i]->show(); + else + pluginViewBases[i]->hide(); + } +} +#endif // PLATFORM(QT) + #if !ASSERT_DISABLED void Page::checkSubframeCountConsistency() const { diff --git a/Source/WebCore/page/Page.h b/Source/WebCore/page/Page.h index d95565ab9..0931ed7b8 100644 --- a/Source/WebCore/page/Page.h +++ b/Source/WebCore/page/Page.h @@ -353,6 +353,10 @@ public: void setVisibilityState(PageVisibilityState, bool); #endif +#if PLATFORM(QT) + void pluginVisibilityChanged(bool visible); +#endif // PLATFORM(QT) + void addLayoutMilestones(LayoutMilestones); void removeLayoutMilestones(LayoutMilestones); LayoutMilestones requestedLayoutMilestones() const { return m_requestedLayoutMilestones; } diff --git a/Source/WebCore/platform/qt/QWebPageClient.h b/Source/WebCore/platform/qt/QWebPageClient.h index d07907287..71ba34a19 100644 --- a/Source/WebCore/platform/qt/QWebPageClient.h +++ b/Source/WebCore/platform/qt/QWebPageClient.h @@ -62,6 +62,7 @@ public: virtual QOpenGLContext* openGLContextIfAvailable() { return 0; } virtual void setInputMethodHints(Qt::InputMethodHints hint) = 0; + virtual bool isViewVisible() = 0; #ifndef QT_NO_CURSOR inline void resetCursor() diff --git a/Source/WebCore/plugins/win/PluginViewWin.cpp b/Source/WebCore/plugins/win/PluginViewWin.cpp index 3fa897db8..b225673ab 100644 --- a/Source/WebCore/plugins/win/PluginViewWin.cpp +++ b/Source/WebCore/plugins/win/PluginViewWin.cpp @@ -345,6 +345,17 @@ static bool isWindowsMessageUserGesture(UINT message) } } +static inline bool isWebViewVisible(FrameView* view) +{ +#if PLATFORM(QT) + if (PlatformPageClient client = view->hostWindow()->platformPageClient()) + return client->isViewVisible(); + return false; +#else + return true; +#endif // PLATFORM(QT) +} + static inline IntPoint contentsToNativeWindow(FrameView* view, const IntPoint& point) { #if PLATFORM(QT) @@ -511,9 +522,10 @@ void PluginView::show() { setSelfVisible(true); - if (isParentVisible() && platformPluginWidget()) + if (isParentVisible() && platformPluginWidget()) { ShowWindow(platformPluginWidget(), SW_SHOWNA); - + forceRedraw(); + } Widget::show(); } @@ -819,9 +831,10 @@ void PluginView::setParentVisible(bool visible) Widget::setParentVisible(visible); if (isSelfVisible() && platformPluginWidget()) { - if (visible) + if (visible) { ShowWindow(platformPluginWidget(), SW_SHOWNA); - else + forceRedraw(); + } else ShowWindow(platformPluginWidget(), SW_HIDE); } } @@ -1019,7 +1032,7 @@ bool PluginView::platformStart() #endif DWORD flags = WS_CHILD; - if (isSelfVisible()) + if (isSelfVisible() && isWebViewVisible(toFrameView(parent()))) flags |= WS_VISIBLE; HWND parentWindowHandle = windowHandleForPageClient(m_parentFrame->view()->hostWindow()->platformPageClient()); diff --git a/Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp b/Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp index d1cf7b57d..734601ec2 100644 --- a/Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp +++ b/Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp @@ -345,6 +345,13 @@ QWebPageAdapter::VisibilityState QWebPageAdapter::visibilityState() const #endif } +void QWebPageAdapter::setPluginsVisible(bool visible) +{ + if (!page) + return; + page->pluginVisibilityChanged(visible); +} + void QWebPageAdapter::setNetworkAccessManager(QNetworkAccessManager *manager) { if (manager == networkManager) diff --git a/Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h b/Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h index ab07b84b2..1a26fe177 100644 --- a/Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h +++ b/Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h @@ -267,6 +267,8 @@ public: void setVisibilityState(VisibilityState); VisibilityState visibilityState() const; + void setPluginsVisible(bool visible); + static QWebPageAdapter* kit(WebCore::Page*); WebCore::ViewportArguments viewportArguments() const; void registerUndoStep(WTF::PassRefPtr<WebCore::UndoStep>); diff --git a/Source/WebKit/qt/WidgetApi/qgraphicswebview.cpp b/Source/WebKit/qt/WidgetApi/qgraphicswebview.cpp index a35252093..fe4a16ead 100644 --- a/Source/WebKit/qt/WidgetApi/qgraphicswebview.cpp +++ b/Source/WebKit/qt/WidgetApi/qgraphicswebview.cpp @@ -409,6 +409,9 @@ bool QGraphicsWebView::event(QEvent* event) d->page->d->client->resetCursor(); } #endif + if (event->type() == QEvent::Show + || event->type() == QEvent::Hide) + d->page->event(event); } } return QGraphicsWidget::event(event); diff --git a/Source/WebKit/qt/WidgetApi/qwebpage.cpp b/Source/WebKit/qt/WidgetApi/qwebpage.cpp index 613c1ac56..5ddc5b457 100644 --- a/Source/WebKit/qt/WidgetApi/qwebpage.cpp +++ b/Source/WebKit/qt/WidgetApi/qwebpage.cpp @@ -2690,6 +2690,12 @@ bool QWebPage::event(QEvent *ev) d->dynamicPropertyChangeEvent(this, static_cast<QDynamicPropertyChangeEvent*>(ev)); break; #endif + case QEvent::Show: + d->setPluginsVisible(true); + break; + case QEvent::Hide: + d->setPluginsVisible(false); + break; default: return QObject::event(ev); } diff --git a/Source/WebKit/qt/WidgetApi/qwebview.cpp b/Source/WebKit/qt/WidgetApi/qwebview.cpp index 1a35b325c..05cf042b0 100644 --- a/Source/WebKit/qt/WidgetApi/qwebview.cpp +++ b/Source/WebKit/qt/WidgetApi/qwebview.cpp @@ -703,7 +703,9 @@ bool QWebView::event(QEvent *e) d->page->updatePositionDependentActions(event->pos()); } else #endif // QT_NO_CONTEXTMENU - if (e->type() == QEvent::ShortcutOverride) { + if (e->type() == QEvent::ShortcutOverride + || e->type() == QEvent::Show + || e->type() == QEvent::Hide) { d->page->event(e); #ifndef QT_NO_CURSOR } else if (e->type() == QEvent::CursorChange) { diff --git a/Source/WebKit/qt/WidgetSupport/PageClientQt.cpp b/Source/WebKit/qt/WidgetSupport/PageClientQt.cpp index 8333a59cc..858290f6e 100644 --- a/Source/WebKit/qt/WidgetSupport/PageClientQt.cpp +++ b/Source/WebKit/qt/WidgetSupport/PageClientQt.cpp @@ -157,6 +157,11 @@ void PageClientQWidget::setWidgetVisible(Widget* widget, bool visible) qtWidget->setVisible(visible); } +bool PageClientQWidget::isViewVisible() +{ + return view ? view->isVisible() : false; +} + #if !defined(QT_NO_GRAPHICSVIEW) PageClientQGraphicsWidget::~PageClientQGraphicsWidget() { @@ -343,6 +348,11 @@ QGraphicsView* PageClientQGraphicsWidget::firstGraphicsView() const return view->scene()->views().first(); return 0; } + +bool PageClientQGraphicsWidget::isViewVisible() +{ + return view ? view->isVisible() : false; +} #endif // QT_NO_GRAPHICSVIEW } // namespace WebCore diff --git a/Source/WebKit/qt/WidgetSupport/PageClientQt.h b/Source/WebKit/qt/WidgetSupport/PageClientQt.h index 5db890eb5..8c7953634 100644 --- a/Source/WebKit/qt/WidgetSupport/PageClientQt.h +++ b/Source/WebKit/qt/WidgetSupport/PageClientQt.h @@ -83,6 +83,7 @@ public: virtual QRectF windowRect() const; virtual void setWidgetVisible(Widget*, bool visible); + virtual bool isViewVisible(); QWidget* view; QWebPage* page; @@ -168,6 +169,7 @@ public: virtual bool viewResizesToContentsEnabled() const { return viewResizesToContents; } virtual void setWidgetVisible(Widget*, bool); + virtual bool isViewVisible(); #if USE(TILED_BACKING_STORE) virtual QRectF graphicsItemVisibleRect() const; |