diff options
| author | Michael Bruning <michael.bruning@theqtcompany.com> | 2015-02-23 16:20:37 +0100 |
|---|---|---|
| committer | Michael BrĂ¼ning <michael.bruning@theqtcompany.com> | 2015-02-26 11:43:32 +0000 |
| commit | 67aba37ab361fc117366e283365920013b8d8464 (patch) | |
| tree | 61a15569cb95ca754a17399cf0a557c621d83951 /Source/WebKit/qt | |
| parent | 877fe7d55036492a897d0928fe43d5df2bc6e2e5 (diff) | |
| download | qtwebkit-67aba37ab361fc117366e283365920013b8d8464.tar.gz | |
Forward show and hide events to PluginViews
This was causing issues with windows plugins on windows, which were
always visible on top of all other widgets and not hidden correctly
when the owning web view was hidden.
Task-number: QTBUG-44401
Task-number: QTBUG-42588
Task-number: QTBUG-43024
Change-Id: Ie0307fa2f7b2bf59f51a76db5feef2e8446c359d
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Diffstat (limited to 'Source/WebKit/qt')
| -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 |
7 files changed, 33 insertions, 1 deletions
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; |
