summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp')
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp182
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