summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/WebCore/page/Page.cpp15
-rw-r--r--Source/WebCore/page/Page.h4
-rw-r--r--Source/WebCore/platform/qt/QWebPageClient.h1
-rw-r--r--Source/WebCore/plugins/win/PluginViewWin.cpp23
-rw-r--r--Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp7
-rw-r--r--Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h2
-rw-r--r--Source/WebKit/qt/WidgetApi/qgraphicswebview.cpp3
-rw-r--r--Source/WebKit/qt/WidgetApi/qwebpage.cpp6
-rw-r--r--Source/WebKit/qt/WidgetApi/qwebview.cpp4
-rw-r--r--Source/WebKit/qt/WidgetSupport/PageClientQt.cpp10
-rw-r--r--Source/WebKit/qt/WidgetSupport/PageClientQt.h2
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;