diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp | 182 |
1 files changed, 156 insertions, 26 deletions
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp index 264cbb044..187b9b4ca 100644 --- a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp +++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp @@ -113,8 +113,6 @@ void QQuickWebViewPrivate::enableMouseEvents() Q_Q(QQuickWebView); q->setAcceptedMouseButtons(Qt::MouseButtonMask); q->setAcceptHoverEvents(true); - pageView->setAcceptedMouseButtons(Qt::MouseButtonMask); - pageView->setAcceptHoverEvents(true); } void QQuickWebViewPrivate::disableMouseEvents() @@ -122,8 +120,6 @@ void QQuickWebViewPrivate::disableMouseEvents() Q_Q(QQuickWebView); q->setAcceptedMouseButtons(Qt::NoButton); q->setAcceptHoverEvents(false); - pageView->setAcceptedMouseButtons(Qt::NoButton); - pageView->setAcceptHoverEvents(false); } void QQuickWebViewPrivate::initializeDesktop(QQuickWebView* viewport) @@ -154,7 +150,7 @@ void QQuickWebViewPrivate::loadDidCommit() // Due to entering provisional load before committing, we // might actually be suspended here. - if (useTraditionalDesktopBehaviour) + if (pageView->usesTraditionalDesktopBehaviour()) return; isTransitioningToNewPage = true; @@ -162,7 +158,7 @@ void QQuickWebViewPrivate::loadDidCommit() void QQuickWebViewPrivate::didFinishFirstNonEmptyLayout() { - if (useTraditionalDesktopBehaviour) + if (pageView->usesTraditionalDesktopBehaviour()) return; if (!pageIsSuspended) { @@ -200,7 +196,7 @@ void QQuickWebViewPrivate::_q_resume() void QQuickWebViewPrivate::didChangeContentsSize(const QSize& newSize) { Q_Q(QQuickWebView); - if (useTraditionalDesktopBehaviour) + if (pageView->usesTraditionalDesktopBehaviour()) return; // FIXME: We probably want to handle suspend here as well @@ -209,15 +205,13 @@ void QQuickWebViewPrivate::didChangeContentsSize(const QSize& newSize) return; } - pageView->setWidth(newSize.width()); - pageView->setHeight(newSize.height()); - + pageView->setContentSize(newSize); q->m_experimental->viewportInfo()->didUpdateContentsSize(); } void QQuickWebViewPrivate::didChangeViewportProperties(const WebCore::ViewportArguments& args) { - if (useTraditionalDesktopBehaviour) + if (pageView->usesTraditionalDesktopBehaviour()) return; viewportArguments = args; @@ -235,7 +229,7 @@ void QQuickWebViewPrivate::didChangeBackForwardList() void QQuickWebViewPrivate::pageDidRequestScroll(const QPoint& pos) { - if (useTraditionalDesktopBehaviour) + if (pageView->usesTraditionalDesktopBehaviour()) return; if (isTransitioningToNewPage) { @@ -287,10 +281,10 @@ void QQuickWebViewPrivate::updateVisibleContentRectAndScale() return; Q_Q(QQuickWebView); - const QRectF visibleRectInPageViewCoordinates = q->mapRectToItem(pageView.data(), q->boundingRect()).intersected(pageView->boundingRect()); - float scale = pageView->scale(); + const QRectF visibleRectInCSSCoordinates = q->mapRectToWebContent(q->boundingRect()).intersected(pageView->boundingRect()); + float scale = pageView->contentScale(); - QRect alignedVisibleContentRect = visibleRectInPageViewCoordinates.toAlignedRect(); + QRect alignedVisibleContentRect = visibleRectInCSSCoordinates.toAlignedRect(); drawingArea->setVisibleContentsRectAndScale(alignedVisibleContentRect, scale); // FIXME: Once we support suspend and resume, this should be delayed until the page is active if the page is suspended. @@ -345,8 +339,7 @@ void QQuickWebViewPrivate::PostTransitionState::apply() p->interactionEngine->pagePositionRequest(position); if (contentsSize.isValid()) { - p->pageView->setWidth(contentsSize.width()); - p->pageView->setHeight(contentsSize.height()); + p->pageView->setContentSize(contentsSize); p->q_ptr->experimental()->viewportInfo()->didUpdateContentsSize(); } @@ -502,9 +495,8 @@ void QQuickWebViewPrivate::setUseTraditionalDesktopBehaviour(bool enable) // Do not guard, testing for the same value, as we call this from the constructor. webPageProxy->setUseFixedLayout(!enable); - - useTraditionalDesktopBehaviour = enable; - if (useTraditionalDesktopBehaviour) + pageView->setUsesTraditionalDesktopBehaviour(enable); + if (enable) initializeDesktop(q); else initializeTouch(q); @@ -609,7 +601,7 @@ void QQuickWebViewExperimental::setUseTraditionalDesktopBehaviour(bool enable) { Q_D(QQuickWebView); - if (enable == d->useTraditionalDesktopBehaviour) + if (enable == d->pageView->usesTraditionalDesktopBehaviour()) return; d->setUseTraditionalDesktopBehaviour(enable); @@ -697,7 +689,7 @@ void QQuickWebViewExperimental::setItemSelector(QDeclarativeComponent* itemSelec bool QQuickWebViewExperimental::useTraditionalDesktopBehaviour() const { Q_D(const QQuickWebView); - return d->useTraditionalDesktopBehaviour; + return d->pageView->usesTraditionalDesktopBehaviour(); } QQuickUrlSchemeDelegate* QQuickWebViewExperimental::schemeDelegates_At(QDeclarativeListProperty<QQuickUrlSchemeDelegate>* property, int index) @@ -895,6 +887,30 @@ bool QQuickWebView::canReload() const return d->webPageProxy->backForwardList()->currentItem(); } +QPointF QQuickWebView::mapToWebContent(const QPointF& pointInViewCoordinates) const +{ + Q_D(const QQuickWebView); + return d->pageView->transformFromItem().map(pointInViewCoordinates); +} + +QRectF QQuickWebView::mapRectToWebContent(const QRectF& rectInViewCoordinates) const +{ + Q_D(const QQuickWebView); + return d->pageView->transformFromItem().mapRect(rectInViewCoordinates); +} + +QPointF QQuickWebView::mapFromWebContent(const QPointF& pointInCSSCoordinates) const +{ + Q_D(const QQuickWebView); + return d->pageView->transformToItem().map(pointInCSSCoordinates); +} + +QRectF QQuickWebView::mapRectFromWebContent(const QRectF& rectInCSSCoordinates) const +{ + Q_D(const QQuickWebView); + return d->pageView->transformToItem().mapRect(rectInCSSCoordinates); +} + QString QQuickWebView::title() const { Q_D(const QQuickWebView); @@ -948,7 +964,7 @@ void QQuickWebView::geometryChanged(const QRectF& newGeometry, const QRectF& old Q_D(QQuickWebView); QQuickItem::geometryChanged(newGeometry, oldGeometry); if (newGeometry.size() != oldGeometry.size()) { - if (d->useTraditionalDesktopBehaviour) { + if (d->pageView->usesTraditionalDesktopBehaviour()) { d->pageView->setWidth(newGeometry.width()); d->pageView->setHeight(newGeometry.height()); } else @@ -956,16 +972,130 @@ void QQuickWebView::geometryChanged(const QRectF& newGeometry, const QRectF& old } } +void QQuickWebView::keyPressEvent(QKeyEvent* event) +{ + this->event(event); +} + +void QQuickWebView::keyReleaseEvent(QKeyEvent* event) +{ + this->event(event); +} + +void QQuickWebView::inputMethodEvent(QInputMethodEvent* event) +{ + this->event(event); +} + void QQuickWebView::focusInEvent(QFocusEvent* event) { - Q_D(QQuickWebView); - d->pageView->event(event); + this->event(event); } void QQuickWebView::focusOutEvent(QFocusEvent* event) { + this->event(event); +} + +void QQuickWebView::touchEvent(QTouchEvent* event) +{ + forceActiveFocus(); + this->event(event); +} + +void QQuickWebView::mousePressEvent(QMouseEvent* event) +{ + forceActiveFocus(); + this->event(event); +} + +void QQuickWebView::mouseMoveEvent(QMouseEvent* event) +{ + this->event(event); +} + +void QQuickWebView::mouseReleaseEvent(QMouseEvent* event) +{ + this->event(event); +} + +void QQuickWebView::mouseDoubleClickEvent(QMouseEvent* event) +{ + this->event(event); +} + +void QQuickWebView::wheelEvent(QWheelEvent* event) +{ + this->event(event); +} + +void QQuickWebView::hoverEnterEvent(QHoverEvent* event) +{ + this->event(event); +} + +void QQuickWebView::hoverMoveEvent(QHoverEvent* event) +{ + this->event(event); +} + +void QQuickWebView::hoverLeaveEvent(QHoverEvent* event) +{ + this->event(event); +} + +void QQuickWebView::dragMoveEvent(QDragMoveEvent* event) +{ + this->event(event); +} + +void QQuickWebView::dragEnterEvent(QDragEnterEvent* event) +{ + this->event(event); +} + +void QQuickWebView::dragLeaveEvent(QDragLeaveEvent* event) +{ + this->event(event); +} + +void QQuickWebView::dropEvent(QDropEvent* event) +{ + this->event(event); +} + +bool QQuickWebView::event(QEvent* ev) +{ Q_D(QQuickWebView); - d->pageView->event(event); + + switch (ev->type()) { + case QEvent::MouseMove: + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseButtonDblClick: + case QEvent::Wheel: + case QEvent::HoverLeave: + case QEvent::HoverEnter: + case QEvent::HoverMove: + case QEvent::DragEnter: + case QEvent::DragLeave: + case QEvent::DragMove: + case QEvent::Drop: + case QEvent::KeyPress: + case QEvent::KeyRelease: + case QEvent::FocusIn: + case QEvent::FocusOut: + case QEvent::TouchBegin: + case QEvent::TouchEnd: + case QEvent::TouchUpdate: + if (d->pageView->eventHandler()->handleEvent(ev)) + return true; + } + + if (ev->type() == QEvent::InputMethod) + return false; // This is necessary to avoid an endless loop in connection with QQuickItem::event(). + + return QQuickItem::event(ev); } WKPageRef QQuickWebView::pageRef() const |