Changeset 106658 in webkit


Ignore:
Timestamp:
Feb 3, 2012 6:47:50 AM (12 years ago)
Author:
jocelyn.turcotte@nokia.com
Message:

[Qt] Split QQuickWebViewPrivate in two classes, for desktop and touch behavior.
https://bugs.webkit.org/show_bug.cgi?id=77632

Reviewed by Kenneth Rohde Christiansen.

Source/WebKit2:

Replace the runtime property setting the desktop behavior on each instance
by a static boolean controlling the behavior used by future created WebViews.

  • UIProcess/API/qt/qquickwebpage.cpp:

Let only setContentsSize control the size of the drawing area instead of deferring
it until geometryChanged is called.
(QQuickWebPagePrivate::QQuickWebPagePrivate):

  • UIProcess/API/qt/qquickwebpage_p.h:
  • UIProcess/API/qt/qquickwebpage_p_p.h:

(QQuickWebPagePrivate):

  • UIProcess/API/qt/qquickwebview.cpp:

(createPrivateObject):
(QQuickWebViewPrivate::QQuickWebViewPrivate):
(QQuickWebViewPrivate::~QQuickWebViewPrivate):
(QQuickWebViewPrivate::initialize):
(QQuickWebViewPrivate::processDidCrash):
(QQuickWebViewLegacyPrivate::QQuickWebViewLegacyPrivate):
(QQuickWebViewLegacyPrivate::initialize):
(QQuickWebViewLegacyPrivate::updateViewportSize):
(QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate):
(QQuickWebViewFlickablePrivate::~QQuickWebViewFlickablePrivate):
(QQuickWebViewFlickablePrivate::initialize):
(QQuickWebViewFlickablePrivate::loadDidCommit):
(QQuickWebViewFlickablePrivate::didFinishFirstNonEmptyLayout):
(QQuickWebViewFlickablePrivate::didChangeViewportProperties):
(QQuickWebViewFlickablePrivate::updateViewportSize):
(QQuickWebViewFlickablePrivate::_q_updateVisibleContentRectAndScale):
(QQuickWebViewFlickablePrivate::_q_suspend):
(QQuickWebViewFlickablePrivate::_q_resume):
(QQuickWebViewFlickablePrivate::pageDidRequestScroll):
(QQuickWebViewFlickablePrivate::didChangeContentsSize):
(QQuickWebViewFlickablePrivate::computeViewportConstraints):
(QQuickWebViewFlickablePrivate::PostTransitionState::apply):
(QQuickWebViewExperimental::setFlickableViewportEnabled):
The switch is now a static function that has to be called before a WebView
is created. The switch can have it's default defined by the deploying platform.
(QQuickWebViewExperimental::flickableViewportEnabled):
(QQuickWebView::QQuickWebView):
On creation of QQuickWebView, the static boolean is read to know if we want
a QQuickWebViewTouchPrivate or a QQuickWebViewDesktopPrivate.
(QQuickWebView::geometryChanged):

  • UIProcess/API/qt/qquickwebview_p.h:
  • UIProcess/API/qt/qquickwebview_p_p.h:

(QQuickWebViewPrivate):
(QQuickWebViewPrivate::loadDidCommit):
(QQuickWebViewPrivate::didFinishFirstNonEmptyLayout):
(QQuickWebViewPrivate::didChangeViewportProperties):
(QQuickWebViewPrivate::viewportInteractionEngine):
(QQuickWebViewPrivate::updateViewportSize):
(QQuickWebViewPrivate::_q_updateVisibleContentRectAndScale):
(QQuickWebViewPrivate::_q_suspend):
(QQuickWebViewPrivate::_q_resume):
(QQuickWebViewPrivate::pageDidRequestScroll):
(QQuickWebViewPrivate::didChangeContentsSize):
(QQuickWebViewLegacyPrivate):
(QQuickWebViewFlickablePrivate):
(QQuickWebViewFlickablePrivate::viewportInteractionEngine):
(PostTransitionState):
(QQuickWebViewFlickablePrivate::PostTransitionState::PostTransitionState):

  • UIProcess/API/qt/qwebviewportinfo.cpp:

(QWebViewportInfo::currentScale):
(QWebViewportInfo::devicePixelRatio):
(QWebViewportInfo::initialScale):
(QWebViewportInfo::minimumScale):
(QWebViewportInfo::maximumScale):
(QWebViewportInfo::isScalable):
(QWebViewportInfo::layoutSize):

  • UIProcess/API/qt/tests/publicapi/publicapi.pro:
  • UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro: Added.
  • UIProcess/API/qt/tests/qmltests/DesktopBehavior/DesktopWebView.qml: Removed.
  • UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_itemSelector.qml: Renamed

from Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_itemSelector.qml.
Moved to DesktopBehavior instead of using a DesktopWebView to workaround the touch event limitation.

  • UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_linkHovered.qml:
  • UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_loadHtml.qml:
  • UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_messaging.qml:
  • UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_navigationRequested.qml:
  • UIProcess/API/qt/tests/qmltests/WebView.pro: Copied

from Source/WebKit2/UIProcess/API/qt/tests/qmltests/qmltests.pro.

  • UIProcess/API/qt/tests/qmltests/qmltests.pro:

Split qmltests in two executables, tst_qmltests_DesktopBehavior and tst_qmltests_WebView.
The former runs without setFlickableViewportEnabled and the later does.

  • UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp:

(main):

  • UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro:
  • UIProcess/API/qt/tests/tests.pri:
  • UIProcess/qt/QtWebPageEventHandler.cpp:

(QtWebPageEventHandler::QtWebPageEventHandler):

Tools:

  • MiniBrowser/qt/BrowserWindow.cpp:

(BrowserWindow::BrowserWindow):

  • MiniBrowser/qt/MiniBrowserApplication.cpp:

(MiniBrowserApplication::sendTouchEvent):
(MiniBrowserApplication::handleUserOptions):

  • MiniBrowser/qt/MiniBrowserApplication.h:

(WindowOptions):
(WindowOptions::WindowOptions):

  • WebKitTestRunner/qt/PlatformWebViewQt.cpp:

(WTR::PlatformWebView::PlatformWebView):

  • WebKitTestRunner/qt/main.cpp:

(main):

  • qmake/mkspecs/features/default_post.prf:
Location:
trunk
Files:
1 added
1 deleted
25 edited
1 copied
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r106656 r106658  
     12012-02-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>
     2
     3        [Qt] Split QQuickWebViewPrivate in two classes, for desktop and touch behavior.
     4        https://bugs.webkit.org/show_bug.cgi?id=77632
     5
     6        Reviewed by Kenneth Rohde Christiansen.
     7
     8        Replace the runtime property setting the desktop behavior on each instance
     9        by a static boolean controlling the behavior used by future created WebViews.
     10
     11        * UIProcess/API/qt/qquickwebpage.cpp:
     12        Let only setContentsSize control the size of the drawing area instead of deferring
     13        it until geometryChanged is called.
     14        (QQuickWebPagePrivate::QQuickWebPagePrivate):
     15        * UIProcess/API/qt/qquickwebpage_p.h:
     16        * UIProcess/API/qt/qquickwebpage_p_p.h:
     17        (QQuickWebPagePrivate):
     18        * UIProcess/API/qt/qquickwebview.cpp:
     19        (createPrivateObject):
     20        (QQuickWebViewPrivate::QQuickWebViewPrivate):
     21        (QQuickWebViewPrivate::~QQuickWebViewPrivate):
     22        (QQuickWebViewPrivate::initialize):
     23        (QQuickWebViewPrivate::processDidCrash):
     24        (QQuickWebViewLegacyPrivate::QQuickWebViewLegacyPrivate):
     25        (QQuickWebViewLegacyPrivate::initialize):
     26        (QQuickWebViewLegacyPrivate::updateViewportSize):
     27        (QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate):
     28        (QQuickWebViewFlickablePrivate::~QQuickWebViewFlickablePrivate):
     29        (QQuickWebViewFlickablePrivate::initialize):
     30        (QQuickWebViewFlickablePrivate::loadDidCommit):
     31        (QQuickWebViewFlickablePrivate::didFinishFirstNonEmptyLayout):
     32        (QQuickWebViewFlickablePrivate::didChangeViewportProperties):
     33        (QQuickWebViewFlickablePrivate::updateViewportSize):
     34        (QQuickWebViewFlickablePrivate::_q_updateVisibleContentRectAndScale):
     35        (QQuickWebViewFlickablePrivate::_q_suspend):
     36        (QQuickWebViewFlickablePrivate::_q_resume):
     37        (QQuickWebViewFlickablePrivate::pageDidRequestScroll):
     38        (QQuickWebViewFlickablePrivate::didChangeContentsSize):
     39        (QQuickWebViewFlickablePrivate::computeViewportConstraints):
     40        (QQuickWebViewFlickablePrivate::PostTransitionState::apply):
     41        (QQuickWebViewExperimental::setFlickableViewportEnabled):
     42        The switch is now a static function that has to be called before a WebView
     43        is created. The switch can have it's default defined by the deploying platform.
     44        (QQuickWebViewExperimental::flickableViewportEnabled):
     45        (QQuickWebView::QQuickWebView):
     46        On creation of QQuickWebView, the static boolean is read to know if we want
     47        a QQuickWebViewTouchPrivate or a QQuickWebViewDesktopPrivate.
     48        (QQuickWebView::geometryChanged):
     49        * UIProcess/API/qt/qquickwebview_p.h:
     50        * UIProcess/API/qt/qquickwebview_p_p.h:
     51        (QQuickWebViewPrivate):
     52        (QQuickWebViewPrivate::loadDidCommit):
     53        (QQuickWebViewPrivate::didFinishFirstNonEmptyLayout):
     54        (QQuickWebViewPrivate::didChangeViewportProperties):
     55        (QQuickWebViewPrivate::viewportInteractionEngine):
     56        (QQuickWebViewPrivate::updateViewportSize):
     57        (QQuickWebViewPrivate::_q_updateVisibleContentRectAndScale):
     58        (QQuickWebViewPrivate::_q_suspend):
     59        (QQuickWebViewPrivate::_q_resume):
     60        (QQuickWebViewPrivate::pageDidRequestScroll):
     61        (QQuickWebViewPrivate::didChangeContentsSize):
     62        (QQuickWebViewLegacyPrivate):
     63        (QQuickWebViewFlickablePrivate):
     64        (QQuickWebViewFlickablePrivate::viewportInteractionEngine):
     65        (PostTransitionState):
     66        (QQuickWebViewFlickablePrivate::PostTransitionState::PostTransitionState):
     67        * UIProcess/API/qt/qwebviewportinfo.cpp:
     68        (QWebViewportInfo::currentScale):
     69        (QWebViewportInfo::devicePixelRatio):
     70        (QWebViewportInfo::initialScale):
     71        (QWebViewportInfo::minimumScale):
     72        (QWebViewportInfo::maximumScale):
     73        (QWebViewportInfo::isScalable):
     74        (QWebViewportInfo::layoutSize):
     75        * UIProcess/API/qt/tests/publicapi/publicapi.pro:
     76        * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro: Added.
     77        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/DesktopWebView.qml: Removed.
     78        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_itemSelector.qml: Renamed
     79        from Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_itemSelector.qml.
     80        Moved to DesktopBehavior instead of using a DesktopWebView to workaround the touch event limitation.
     81        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_linkHovered.qml:
     82        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_loadHtml.qml:
     83        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_messaging.qml:
     84        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_navigationRequested.qml:
     85        * UIProcess/API/qt/tests/qmltests/WebView.pro: Copied
     86        from Source/WebKit2/UIProcess/API/qt/tests/qmltests/qmltests.pro.
     87        * UIProcess/API/qt/tests/qmltests/qmltests.pro:
     88        Split qmltests in two executables, tst_qmltests_DesktopBehavior and tst_qmltests_WebView.
     89        The former runs without setFlickableViewportEnabled and the later does.
     90        * UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp:
     91        (main):
     92        * UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro:
     93        * UIProcess/API/qt/tests/tests.pri:
     94        * UIProcess/qt/QtWebPageEventHandler.cpp:
     95        (QtWebPageEventHandler::QtWebPageEventHandler):
     96
    1972012-02-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>
    298
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp

    r106656 r106658  
    5252}
    5353
    54 void QQuickWebPage::geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry)
    55 {
    56     QQuickItem::geometryChanged(newGeometry, oldGeometry);
    57 
    58     if (!d->useTraditionalDesktopBehaviour)
    59         return;
    60 
    61     if (newGeometry.size() != oldGeometry.size())
    62         d->setDrawingAreaSize(newGeometry.size().toSize());
    63 }
    64 
    6554QQuickWebPagePrivate::QQuickWebPagePrivate(QQuickWebPage* q, QQuickWebView* viewportItem)
    6655    : q(q)
     
    7160    , m_paintNode(0)
    7261    , contentsScale(1)
    73     , useTraditionalDesktopBehaviour(false)
    7462{
    7563}
     
    221209}
    222210
    223 bool QQuickWebPage::usesTraditionalDesktopBehaviour() const
    224 {
    225     return d->useTraditionalDesktopBehaviour;
    226 }
    227 
    228 void QQuickWebPage::setUsesTraditionalDesktopBehaviour(bool enable)
    229 {
    230     d->useTraditionalDesktopBehaviour = enable;
    231 }
    232 
    233211QtWebPageEventHandler* QQuickWebPage::eventHandler() const
    234212{
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebpage_p.h

    r106656 r106658  
    5050    QTransform transformToItem() const;
    5151
    52     bool usesTraditionalDesktopBehaviour() const;
    53     void setUsesTraditionalDesktopBehaviour(bool enable);
    54 
    5552    QtWebPageEventHandler* eventHandler() const;
    5653
     
    5956
    6057protected:
    61     virtual void geometryChanged(const QRectF&, const QRectF&);
    6258    virtual QSGNode* updatePaintNode(QSGNode*, UpdatePaintNodeData*);
    6359
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebpage_p_p.h

    r106656 r106658  
    5757    QSizeF contentsSize;
    5858    qreal contentsScale;
    59     bool useTraditionalDesktopBehaviour;
    6059};
    6160
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp

    r106656 r106658  
    5656using namespace WebCore;
    5757
     58static bool s_flickableViewportEnabled = true;
     59
     60static QQuickWebViewPrivate* createPrivateObject(QQuickWebView* publicObject)
     61{
     62    if (s_flickableViewportEnabled)
     63        return new QQuickWebViewFlickablePrivate(publicObject);
     64    return new QQuickWebViewLegacyPrivate(publicObject);
     65}
     66
    5867QQuickWebViewPrivate::QQuickWebViewPrivate(QQuickWebView* viewport)
    5968    : q_ptr(viewport)
     
    6473    , certificateVerificationDialog(0)
    6574    , itemSelector(0)
    66     , postTransitionState(adoptPtr(new PostTransitionState(this)))
    67     , isTransitioningToNewPage(false)
    68     , pageIsSuspended(false)
    6975    , m_navigatorQtObjectEnabled(false)
    7076    , m_renderToOffscreenBuffer(false)
     
    7783QQuickWebViewPrivate::~QQuickWebViewPrivate()
    7884{
    79     if (interactionEngine)
    80         interactionEngine->disconnect();
    8185    webPageProxy->close();
    8286}
     
    107111
    108112    // Any page setting should preferrable be set before creating the page.
    109     setUseTraditionalDesktopBehaviour(false);
    110113    webPageProxy->pageGroup()->preferences()->setAcceleratedCompositingEnabled(true);
    111114    webPageProxy->pageGroup()->preferences()->setForceCompositingMode(true);
     
    113116    pageClient.initialize(q_ptr, pageViewPrivate->eventHandler.data(), &undoController);
    114117    webPageProxy->initializeWebPage();
    115 
    116     // Trigger setting of correct visibility flags after everything was allocated and initialized.
    117     _q_onVisibleChanged();
     118    updateViewportSize();
    118119}
    119120
     
    130131    q->setAcceptedMouseButtons(Qt::NoButton);
    131132    q->setAcceptHoverEvents(false);
    132 }
    133 
    134 void QQuickWebViewPrivate::initializeDesktop(QQuickWebView* viewport)
    135 {
    136     if (interactionEngine) {
    137         QObject::disconnect(interactionEngine.data(), SIGNAL(contentSuspendRequested()), viewport, SLOT(_q_suspend()));
    138         QObject::disconnect(interactionEngine.data(), SIGNAL(contentResumeRequested()), viewport, SLOT(_q_resume()));
    139         QObject::disconnect(interactionEngine.data(), SIGNAL(viewportTrajectoryVectorChanged(const QPointF&)), viewport, SLOT(_q_viewportTrajectoryVectorChanged(const QPointF&)));
    140         QObject::disconnect(interactionEngine.data(), SIGNAL(visibleContentRectAndScaleChanged()), viewport, SLOT(_q_updateVisibleContentRectAndScale()));
    141     }
    142     interactionEngine.reset(0);
    143     pageView->d->eventHandler->setViewportInteractionEngine(0);
    144     enableMouseEvents();
    145     updateDesktopViewportSize();
    146 }
    147 
    148 void QQuickWebViewPrivate::initializeTouch(QQuickWebView* viewport)
    149 {
    150     interactionEngine.reset(new QtViewportInteractionEngine(viewport, pageView.data()));
    151     pageView->d->eventHandler->setViewportInteractionEngine(interactionEngine.data());
    152     disableMouseEvents();
    153     QObject::connect(interactionEngine.data(), SIGNAL(contentSuspendRequested()), viewport, SLOT(_q_suspend()));
    154     QObject::connect(interactionEngine.data(), SIGNAL(contentResumeRequested()), viewport, SLOT(_q_resume()));
    155     QObject::connect(interactionEngine.data(), SIGNAL(viewportTrajectoryVectorChanged(const QPointF&)), viewport, SLOT(_q_viewportTrajectoryVectorChanged(const QPointF&)));
    156     QObject::connect(interactionEngine.data(), SIGNAL(visibleContentRectAndScaleChanged()), viewport, SLOT(_q_updateVisibleContentRectAndScale()));
    157     updateTouchViewportSize();
    158133}
    159134
     
    172147}
    173148
    174 void QQuickWebViewPrivate::loadDidCommit()
    175 {
    176     // Due to entering provisional load before committing, we
    177     // might actually be suspended here.
    178 
    179     if (pageView->usesTraditionalDesktopBehaviour())
    180         return;
    181 
    182     isTransitioningToNewPage = true;
    183 }
    184 
    185 void QQuickWebViewPrivate::didFinishFirstNonEmptyLayout()
    186 {
    187     if (pageView->usesTraditionalDesktopBehaviour())
    188         return;
    189 
    190     if (!pageIsSuspended) {
    191         isTransitioningToNewPage = false;
    192         postTransitionState->apply();
    193     }
    194 }
    195 
    196149void QQuickWebViewPrivate::_q_onIconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURL)
    197150{
     
    203156}
    204157
    205 void QQuickWebViewPrivate::_q_suspend()
    206 {
    207     pageIsSuspended = true;
    208 }
    209 
    210 void QQuickWebViewPrivate::_q_resume()
    211 {
    212     pageIsSuspended = false;
    213 
    214     if (isTransitioningToNewPage) {
    215         isTransitioningToNewPage = false;
    216         postTransitionState->apply();
    217     }
    218 
    219     _q_updateVisibleContentRectAndScale();
    220 }
    221 
    222 void QQuickWebViewPrivate::didChangeContentsSize(const QSize& newSize)
    223 {
    224     Q_Q(QQuickWebView);
    225     if (pageView->usesTraditionalDesktopBehaviour())
    226         return;
    227 
    228     // FIXME: We probably want to handle suspend here as well
    229     if (isTransitioningToNewPage) {
    230         postTransitionState->contentsSize = newSize;
    231         return;
    232     }
    233 
    234     pageView->setContentsSize(newSize);
    235     q->m_experimental->viewportInfo()->didUpdateContentsSize();
    236 }
    237 
    238 void QQuickWebViewPrivate::didChangeViewportProperties(const WebCore::ViewportArguments& args)
    239 {
    240     if (pageView->usesTraditionalDesktopBehaviour())
    241         return;
    242 
    243     viewportArguments = args;
    244 
    245     if (isTransitioningToNewPage)
    246         return;
    247 
    248     interactionEngine->applyConstraints(computeViewportConstraints());
    249 }
    250 
    251158void QQuickWebViewPrivate::didChangeBackForwardList()
    252159{
     
    254161}
    255162
    256 void QQuickWebViewPrivate::pageDidRequestScroll(const QPoint& pos)
    257 {
    258     if (pageView->usesTraditionalDesktopBehaviour())
    259         return;
    260 
    261     if (isTransitioningToNewPage) {
    262         postTransitionState->position = pos;
    263         return;
    264     }
    265 
    266     interactionEngine->pagePositionRequest(pos);
    267 }
    268 
    269163void QQuickWebViewPrivate::processDidCrash()
    270164{
    271165    emit q_ptr->navigationStateChanged();
    272     pageView->d->eventHandler->resetGestureRecognizers();
     166    pageView->eventHandler()->resetGestureRecognizers();
    273167    WebCore::KURL url(WebCore::ParsedURLString, webPageProxy->urlAtProcessExit());
    274168    qWarning("WARNING: The web process experienced a crash on '%s'.", qPrintable(QUrl(url).toString(QUrl::RemoveUserInfo)));
     
    301195}
    302196
    303 void QQuickWebViewPrivate::_q_updateVisibleContentRectAndScale()
     197void QQuickWebViewPrivate::_q_viewportTrajectoryVectorChanged(const QPointF& trajectoryVector)
    304198{
    305199    DrawingAreaProxy* drawingArea = webPageProxy->drawingArea();
    306200    if (!drawingArea)
    307201        return;
    308 
    309     Q_Q(QQuickWebView);
    310     const QRectF visibleRectInCSSCoordinates = q->mapRectToWebContent(q->boundingRect()).intersected(pageView->boundingRect());
    311     float scale = pageView->contentsScale();
    312 
    313     QRect alignedVisibleContentRect = visibleRectInCSSCoordinates.toAlignedRect();
    314     drawingArea->setVisibleContentsRectAndScale(alignedVisibleContentRect, scale);
    315 
    316     // FIXME: Once we support suspend and resume, this should be delayed until the page is active if the page is suspended.
    317     webPageProxy->setFixedVisibleContentRect(alignedVisibleContentRect);
    318     q->m_experimental->viewportInfo()->didUpdateCurrentScale();
    319 }
    320 
    321 void QQuickWebViewPrivate::_q_viewportTrajectoryVectorChanged(const QPointF& trajectoryVector)
    322 {
    323     DrawingAreaProxy* drawingArea = webPageProxy->drawingArea();
    324     if (!drawingArea)
    325         return;
    326202    drawingArea->setVisibleContentRectTrajectoryVector(trajectoryVector);
    327203}
     
    343219}
    344220
    345 void QQuickWebViewPrivate::updateDesktopViewportSize()
     221void QQuickWebViewPrivate::runJavaScriptAlert(const QString& alertText)
     222{
     223    if (!alertDialog)
     224        return;
     225
     226    Q_Q(QQuickWebView);
     227    QtDialogRunner dialogRunner;
     228    if (!dialogRunner.initForAlert(alertDialog, q, alertText))
     229        return;
     230    setViewInAttachedProperties(dialogRunner.dialog());
     231
     232    disableMouseEvents();
     233    dialogRunner.exec();
     234    enableMouseEvents();
     235}
     236
     237bool QQuickWebViewPrivate::runJavaScriptConfirm(const QString& message)
     238{
     239    if (!confirmDialog)
     240        return true;
     241
     242    Q_Q(QQuickWebView);
     243    QtDialogRunner dialogRunner;
     244    if (!dialogRunner.initForConfirm(confirmDialog, q, message))
     245        return true;
     246    setViewInAttachedProperties(dialogRunner.dialog());
     247
     248    disableMouseEvents();
     249    dialogRunner.exec();
     250    enableMouseEvents();
     251
     252    return dialogRunner.wasAccepted();
     253}
     254
     255QString QQuickWebViewPrivate::runJavaScriptPrompt(const QString& message, const QString& defaultValue, bool& ok)
     256{
     257    if (!promptDialog) {
     258        ok = true;
     259        return defaultValue;
     260    }
     261
     262    Q_Q(QQuickWebView);
     263    QtDialogRunner dialogRunner;
     264    if (!dialogRunner.initForPrompt(promptDialog, q, message, defaultValue)) {
     265        ok = true;
     266        return defaultValue;
     267    }
     268    setViewInAttachedProperties(dialogRunner.dialog());
     269
     270    disableMouseEvents();
     271    dialogRunner.exec();
     272    enableMouseEvents();
     273
     274    ok = dialogRunner.wasAccepted();
     275    return dialogRunner.result();
     276}
     277
     278void QQuickWebViewPrivate::handleAuthenticationRequiredRequest(const QString& hostname, const QString& realm, const QString& prefilledUsername, QString& username, QString& password)
     279{
     280    if (!authenticationDialog)
     281        return;
     282
     283    Q_Q(QQuickWebView);
     284    QtDialogRunner dialogRunner;
     285    if (!dialogRunner.initForAuthentication(authenticationDialog, q, hostname, realm, prefilledUsername))
     286        return;
     287
     288    setViewInAttachedProperties(dialogRunner.dialog());
     289
     290    disableMouseEvents();
     291    dialogRunner.exec();
     292    enableMouseEvents();
     293
     294    username = dialogRunner.username();
     295    password = dialogRunner.password();
     296}
     297
     298bool QQuickWebViewPrivate::handleCertificateVerificationRequest(const QString& hostname)
     299{
     300    if (!certificateVerificationDialog)
     301        return false;
     302
     303    Q_Q(QQuickWebView);
     304    QtDialogRunner dialogRunner;
     305    if (!dialogRunner.initForCertificateVerification(certificateVerificationDialog, q, hostname))
     306        return false;
     307
     308    setViewInAttachedProperties(dialogRunner.dialog());
     309
     310    disableMouseEvents();
     311    dialogRunner.exec();
     312    enableMouseEvents();
     313
     314    return dialogRunner.wasAccepted();
     315}
     316
     317void QQuickWebViewPrivate::chooseFiles(WKOpenPanelResultListenerRef listenerRef, const QStringList& selectedFileNames, QtWebPageUIClient::FileChooserType type)
     318{
     319#ifndef QT_NO_FILEDIALOG
     320    Q_Q(QQuickWebView);
     321    openPanelResultListener = listenerRef;
     322
     323    // Qt does not support multiple files suggestion, so we get just the first suggestion.
     324    QString selectedFileName;
     325    if (!selectedFileNames.isEmpty())
     326        selectedFileName = selectedFileNames.at(0);
     327
     328    Q_ASSERT(!fileDialog);
     329
     330    QWindow* window = q->canvas();
     331    if (!window)
     332        return;
     333
     334    fileDialog = new QFileDialog(0, QString(), selectedFileName);
     335    fileDialog->window()->winId(); // Ensure that the dialog has a window
     336    Q_ASSERT(fileDialog->window()->windowHandle());
     337    fileDialog->window()->windowHandle()->setTransientParent(window);
     338
     339    fileDialog->open(q, SLOT(_q_onOpenPanelFilesSelected()));
     340
     341    q->connect(fileDialog, SIGNAL(finished(int)), SLOT(_q_onOpenPanelFinished(int)));
     342#endif
     343}
     344
     345void QQuickWebViewPrivate::_q_onOpenPanelFilesSelected()
     346{
     347    const QStringList fileList = fileDialog->selectedFiles();
     348    Vector<RefPtr<APIObject> > wkFiles(fileList.size());
     349
     350    for (unsigned i = 0; i < fileList.size(); ++i)
     351        wkFiles[i] = WebURL::create(QUrl::fromLocalFile(fileList.at(i)).toString());
     352
     353    WKOpenPanelResultListenerChooseFiles(openPanelResultListener, toAPI(ImmutableArray::adopt(wkFiles).leakRef()));
     354}
     355
     356void QQuickWebViewPrivate::_q_onOpenPanelFinished(int result)
     357{
     358    if (result == QDialog::Rejected)
     359        WKOpenPanelResultListenerCancel(openPanelResultListener);
     360
     361    fileDialog->deleteLater();
     362    fileDialog = 0;
     363}
     364
     365void QQuickWebViewPrivate::setViewInAttachedProperties(QObject* object)
     366{
     367    Q_Q(QQuickWebView);
     368    QQuickWebViewAttached* attached = static_cast<QQuickWebViewAttached*>(qmlAttachedPropertiesObject<QQuickWebView>(object));
     369    attached->setView(q);
     370}
     371
     372void QQuickWebViewPrivate::setIcon(const QUrl& iconURL)
     373{
     374    Q_Q(QQuickWebView);
     375    if (m_iconURL == iconURL)
     376        return;
     377
     378    String oldPageURL = QUrl::fromPercentEncoding(m_iconURL.encodedFragment());
     379    String newPageURL = webPageProxy->mainFrame()->url();
     380
     381    if (oldPageURL != newPageURL) {
     382        QtWebIconDatabaseClient* iconDatabase = context->iconDatabase();
     383        if (!oldPageURL.isEmpty())
     384            iconDatabase->releaseIconForPageURL(oldPageURL);
     385
     386        if (!newPageURL.isEmpty())
     387            iconDatabase->retainIconForPageURL(newPageURL);
     388    }
     389
     390    m_iconURL = iconURL;
     391    emit q->iconChanged(m_iconURL);
     392}
     393
     394bool QQuickWebViewPrivate::navigatorQtObjectEnabled() const
     395{
     396    return m_navigatorQtObjectEnabled;
     397}
     398
     399void QQuickWebViewPrivate::setNavigatorQtObjectEnabled(bool enabled)
     400{
     401    ASSERT(enabled != m_navigatorQtObjectEnabled);
     402    // FIXME: Currently we have to keep this information in both processes and the setting is asynchronous.
     403    m_navigatorQtObjectEnabled = enabled;
     404    context->setNavigatorQtObjectEnabled(webPageProxy.get(), enabled);
     405}
     406
     407WebCore::IntSize QQuickWebViewPrivate::viewSize() const
     408{
     409    return WebCore::IntSize(pageView->width(), pageView->height());
     410}
     411
     412void QQuickWebViewPrivate::didReceiveMessageFromNavigatorQtObject(const String& message)
     413{
     414    QVariantMap variantMap;
     415    variantMap.insert(QLatin1String("data"), QString(message));
     416    variantMap.insert(QLatin1String("origin"), q_ptr->url());
     417    emit q_ptr->experimental()->messageReceived(variantMap);
     418}
     419
     420QQuickWebViewLegacyPrivate::QQuickWebViewLegacyPrivate(QQuickWebView* viewport)
     421    : QQuickWebViewPrivate(viewport)
     422{
     423}
     424
     425void QQuickWebViewLegacyPrivate::initialize(WKContextRef contextRef, WKPageGroupRef pageGroupRef)
     426{
     427    QQuickWebViewPrivate::initialize(contextRef, pageGroupRef);
     428    enableMouseEvents();
     429
     430    // Trigger setting of correct visibility flags after everything was allocated and initialized.
     431    _q_onVisibleChanged();
     432}
     433
     434void QQuickWebViewLegacyPrivate::updateViewportSize()
    346435{
    347436    Q_Q(QQuickWebView);
    348437    QSize viewportSize = q->boundingRect().size().toSize();
    349     pageView->setWidth(viewportSize.width());
    350     pageView->setHeight(viewportSize.height());
     438    pageView->setContentsSize(viewportSize);
    351439    // The fixed layout is handled by the FrameView and the drawing area doesn't behave differently
    352     // wether its fixed or not. We still need to tell the drawing area which part of it
     440    // whether its fixed or not. We still need to tell the drawing area which part of it
    353441    // has to be rendered on tiles, and in desktop mode it's all of it.
    354442    webPageProxy->drawingArea()->setVisibleContentsRectAndScale(IntRect(IntPoint(), viewportSize), 1);
    355443}
    356444
    357 void QQuickWebViewPrivate::updateTouchViewportSize()
     445QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate(QQuickWebView* viewport)
     446    : QQuickWebViewPrivate(viewport)
     447    , interactionEngine(new QtViewportInteractionEngine(viewport, pageView.data()))
     448    , postTransitionState(adoptPtr(new PostTransitionState(this)))
     449    , isTransitioningToNewPage(false)
     450    , pageIsSuspended(false)
     451{
     452    QObject::connect(interactionEngine.data(), SIGNAL(contentSuspendRequested()), viewport, SLOT(_q_suspend()));
     453    QObject::connect(interactionEngine.data(), SIGNAL(contentResumeRequested()), viewport, SLOT(_q_resume()));
     454    QObject::connect(interactionEngine.data(), SIGNAL(viewportTrajectoryVectorChanged(const QPointF&)), viewport, SLOT(_q_viewportTrajectoryVectorChanged(const QPointF&)));
     455    QObject::connect(interactionEngine.data(), SIGNAL(visibleContentRectAndScaleChanged()), viewport, SLOT(_q_updateVisibleContentRectAndScale()));
     456}
     457
     458QQuickWebViewFlickablePrivate::~QQuickWebViewFlickablePrivate()
     459{
     460    interactionEngine->disconnect();
     461}
     462
     463void QQuickWebViewFlickablePrivate::initialize(WKContextRef contextRef, WKPageGroupRef pageGroupRef)
     464{
     465    QQuickWebViewPrivate::initialize(contextRef, pageGroupRef);
     466    webPageProxy->setUseFixedLayout(true);
     467    pageView->eventHandler()->setViewportInteractionEngine(interactionEngine.data());
     468
     469    // Trigger setting of correct visibility flags after everything was allocated and initialized.
     470    _q_onVisibleChanged();
     471}
     472
     473void QQuickWebViewFlickablePrivate::loadDidCommit()
     474{
     475    // Due to entering provisional load before committing, we
     476    // might actually be suspended here.
     477
     478    isTransitioningToNewPage = true;
     479}
     480
     481void QQuickWebViewFlickablePrivate::didFinishFirstNonEmptyLayout()
     482{
     483    if (!pageIsSuspended) {
     484        isTransitioningToNewPage = false;
     485        postTransitionState->apply();
     486    }
     487}
     488
     489void QQuickWebViewFlickablePrivate::didChangeViewportProperties(const WebCore::ViewportArguments& args)
     490{
     491    viewportArguments = args;
     492
     493    if (isTransitioningToNewPage)
     494        return;
     495
     496    interactionEngine->applyConstraints(computeViewportConstraints());
     497}
     498
     499void QQuickWebViewFlickablePrivate::updateViewportSize()
    358500{
    359501    Q_Q(QQuickWebView);
     
    371513}
    372514
    373 void QQuickWebViewPrivate::PostTransitionState::apply()
    374 {
    375     p->interactionEngine->reset();
    376     p->interactionEngine->applyConstraints(p->computeViewportConstraints());
    377     p->interactionEngine->pagePositionRequest(position);
    378 
    379     if (contentsSize.isValid()) {
    380         p->pageView->setContentsSize(contentsSize);
    381         p->q_ptr->experimental()->viewportInfo()->didUpdateContentsSize();
     515void QQuickWebViewFlickablePrivate::_q_updateVisibleContentRectAndScale()
     516{
     517    DrawingAreaProxy* drawingArea = webPageProxy->drawingArea();
     518    if (!drawingArea)
     519        return;
     520
     521    Q_Q(QQuickWebView);
     522    const QRectF visibleRectInCSSCoordinates = q->mapRectToWebContent(q->boundingRect()).intersected(pageView->boundingRect());
     523    float scale = pageView->contentsScale();
     524
     525    QRect alignedVisibleContentRect = visibleRectInCSSCoordinates.toAlignedRect();
     526    drawingArea->setVisibleContentsRectAndScale(alignedVisibleContentRect, scale);
     527
     528    // FIXME: Once we support suspend and resume, this should be delayed until the page is active if the page is suspended.
     529    webPageProxy->setFixedVisibleContentRect(alignedVisibleContentRect);
     530    q->experimental()->viewportInfo()->didUpdateCurrentScale();
     531}
     532
     533void QQuickWebViewFlickablePrivate::_q_suspend()
     534{
     535    pageIsSuspended = true;
     536}
     537
     538void QQuickWebViewFlickablePrivate::_q_resume()
     539{
     540    pageIsSuspended = false;
     541
     542    if (isTransitioningToNewPage) {
     543        isTransitioningToNewPage = false;
     544        postTransitionState->apply();
    382545    }
    383546
    384     position = QPoint();
    385     contentsSize = QSize();
    386 }
    387 
    388 QtViewportInteractionEngine::Constraints QQuickWebViewPrivate::computeViewportConstraints()
     547    _q_updateVisibleContentRectAndScale();
     548}
     549
     550void QQuickWebViewFlickablePrivate::pageDidRequestScroll(const QPoint& pos)
     551{
     552    if (isTransitioningToNewPage) {
     553        postTransitionState->position = pos;
     554        return;
     555    }
     556
     557    interactionEngine->pagePositionRequest(pos);
     558}
     559
     560void QQuickWebViewFlickablePrivate::didChangeContentsSize(const QSize& newSize)
     561{
     562    Q_Q(QQuickWebView);
     563    // FIXME: We probably want to handle suspend here as well
     564    if (isTransitioningToNewPage) {
     565        postTransitionState->contentsSize = newSize;
     566        return;
     567    }
     568
     569    pageView->setContentsSize(newSize);
     570    q->experimental()->viewportInfo()->didUpdateContentsSize();
     571}
     572
     573QtViewportInteractionEngine::Constraints QQuickWebViewFlickablePrivate::computeViewportConstraints()
    389574{
    390575    Q_Q(QQuickWebView);
     
    417602    newConstraints.layoutSize = attr.layoutSize;
    418603
    419     q->m_experimental->viewportInfo()->didUpdateViewportConstraints();
     604    q->experimental()->viewportInfo()->didUpdateViewportConstraints();
    420605
    421606    return newConstraints;
    422607}
    423608
    424 void QQuickWebViewPrivate::runJavaScriptAlert(const QString& alertText)
    425 {
    426     if (!alertDialog)
    427         return;
    428 
    429     Q_Q(QQuickWebView);
    430     QtDialogRunner dialogRunner;
    431     if (!dialogRunner.initForAlert(alertDialog, q, alertText))
    432         return;
    433     setViewInAttachedProperties(dialogRunner.dialog());
    434 
    435     disableMouseEvents();
    436     dialogRunner.exec();
    437     enableMouseEvents();
    438 }
    439 
    440 bool QQuickWebViewPrivate::runJavaScriptConfirm(const QString& message)
    441 {
    442     if (!confirmDialog)
    443         return true;
    444 
    445     Q_Q(QQuickWebView);
    446     QtDialogRunner dialogRunner;
    447     if (!dialogRunner.initForConfirm(confirmDialog, q, message))
    448         return true;
    449     setViewInAttachedProperties(dialogRunner.dialog());
    450 
    451     disableMouseEvents();
    452     dialogRunner.exec();
    453     enableMouseEvents();
    454 
    455     return dialogRunner.wasAccepted();
    456 }
    457 
    458 QString QQuickWebViewPrivate::runJavaScriptPrompt(const QString& message, const QString& defaultValue, bool& ok)
    459 {
    460     if (!promptDialog) {
    461         ok = true;
    462         return defaultValue;
     609void QQuickWebViewFlickablePrivate::PostTransitionState::apply()
     610{
     611    p->interactionEngine->reset();
     612    p->interactionEngine->applyConstraints(p->computeViewportConstraints());
     613    p->interactionEngine->pagePositionRequest(position);
     614
     615    if (contentsSize.isValid()) {
     616        p->pageView->setContentsSize(contentsSize);
     617        p->q_ptr->experimental()->viewportInfo()->didUpdateContentsSize();
    463618    }
    464619
    465     Q_Q(QQuickWebView);
    466     QtDialogRunner dialogRunner;
    467     if (!dialogRunner.initForPrompt(promptDialog, q, message, defaultValue)) {
    468         ok = true;
    469         return defaultValue;
    470     }
    471     setViewInAttachedProperties(dialogRunner.dialog());
    472 
    473     disableMouseEvents();
    474     dialogRunner.exec();
    475     enableMouseEvents();
    476 
    477     ok = dialogRunner.wasAccepted();
    478     return dialogRunner.result();
    479 }
    480 
    481 void QQuickWebViewPrivate::handleAuthenticationRequiredRequest(const QString& hostname, const QString& realm, const QString& prefilledUsername, QString& username, QString& password)
    482 {
    483     if (!authenticationDialog)
    484         return;
    485 
    486     Q_Q(QQuickWebView);
    487     QtDialogRunner dialogRunner;
    488     if (!dialogRunner.initForAuthentication(authenticationDialog, q, hostname, realm, prefilledUsername))
    489         return;
    490 
    491     setViewInAttachedProperties(dialogRunner.dialog());
    492 
    493     disableMouseEvents();
    494     dialogRunner.exec();
    495     enableMouseEvents();
    496 
    497     username = dialogRunner.username();
    498     password = dialogRunner.password();
    499 }
    500 
    501 bool QQuickWebViewPrivate::handleCertificateVerificationRequest(const QString& hostname)
    502 {
    503     if (!certificateVerificationDialog)
    504         return false;
    505 
    506     Q_Q(QQuickWebView);
    507     QtDialogRunner dialogRunner;
    508     if (!dialogRunner.initForCertificateVerification(certificateVerificationDialog, q, hostname))
    509         return false;
    510 
    511     setViewInAttachedProperties(dialogRunner.dialog());
    512 
    513     disableMouseEvents();
    514     dialogRunner.exec();
    515     enableMouseEvents();
    516 
    517     return dialogRunner.wasAccepted();
    518 }
    519 
    520 void QQuickWebViewPrivate::chooseFiles(WKOpenPanelResultListenerRef listenerRef, const QStringList& selectedFileNames, QtWebPageUIClient::FileChooserType type)
    521 {
    522 #ifndef QT_NO_FILEDIALOG
    523     Q_Q(QQuickWebView);
    524     openPanelResultListener = listenerRef;
    525 
    526     // Qt does not support multiple files suggestion, so we get just the first suggestion.
    527     QString selectedFileName;
    528     if (!selectedFileNames.isEmpty())
    529         selectedFileName = selectedFileNames.at(0);
    530 
    531     Q_ASSERT(!fileDialog);
    532 
    533     QWindow* window = q->canvas();
    534     if (!window)
    535         return;
    536 
    537     fileDialog = new QFileDialog(0, QString(), selectedFileName);
    538     fileDialog->window()->winId(); // Ensure that the dialog has a window
    539     Q_ASSERT(fileDialog->window()->windowHandle());
    540     fileDialog->window()->windowHandle()->setTransientParent(window);
    541 
    542     fileDialog->open(q, SLOT(_q_onOpenPanelFilesSelected()));
    543 
    544     q->connect(fileDialog, SIGNAL(finished(int)), SLOT(_q_onOpenPanelFinished(int)));
    545 #endif
    546 }
    547 
    548 void QQuickWebViewPrivate::_q_onOpenPanelFilesSelected()
    549 {
    550     const QStringList fileList = fileDialog->selectedFiles();
    551     Vector<RefPtr<APIObject> > wkFiles(fileList.size());
    552 
    553     for (unsigned i = 0; i < fileList.size(); ++i)
    554         wkFiles[i] = WebURL::create(QUrl::fromLocalFile(fileList.at(i)).toString());
    555 
    556     WKOpenPanelResultListenerChooseFiles(openPanelResultListener, toAPI(ImmutableArray::adopt(wkFiles).leakRef()));
    557 }
    558 
    559 void QQuickWebViewPrivate::_q_onOpenPanelFinished(int result)
    560 {
    561     if (result == QDialog::Rejected)
    562         WKOpenPanelResultListenerCancel(openPanelResultListener);
    563 
    564     fileDialog->deleteLater();
    565     fileDialog = 0;
    566 }
    567 
    568 void QQuickWebViewPrivate::setUseTraditionalDesktopBehaviour(bool enable)
    569 {
    570     Q_Q(QQuickWebView);
    571 
    572     // Do not guard, testing for the same value, as we call this from the constructor.
    573 
    574     webPageProxy->setUseFixedLayout(!enable);
    575     pageView->setUsesTraditionalDesktopBehaviour(enable);
    576     if (enable)
    577         initializeDesktop(q);
    578     else
    579         initializeTouch(q);
    580 }
    581 
    582 void QQuickWebViewPrivate::setViewInAttachedProperties(QObject* object)
    583 {
    584     Q_Q(QQuickWebView);
    585     QQuickWebViewAttached* attached = static_cast<QQuickWebViewAttached*>(qmlAttachedPropertiesObject<QQuickWebView>(object));
    586     attached->setView(q);
    587 }
    588 
    589 void QQuickWebViewPrivate::setIcon(const QUrl& iconURL)
    590 {
    591     Q_Q(QQuickWebView);
    592     if (m_iconURL == iconURL)
    593         return;
    594 
    595     String oldPageURL = QUrl::fromPercentEncoding(m_iconURL.encodedFragment());
    596     String newPageURL = webPageProxy->mainFrame()->url();
    597 
    598     if (oldPageURL != newPageURL) {
    599         QtWebIconDatabaseClient* iconDatabase = context->iconDatabase();
    600         if (!oldPageURL.isEmpty())
    601             iconDatabase->releaseIconForPageURL(oldPageURL);
    602 
    603         if (!newPageURL.isEmpty())
    604             iconDatabase->retainIconForPageURL(newPageURL);
    605     }
    606 
    607     m_iconURL = iconURL;
    608     emit q->iconChanged(m_iconURL);
    609 }
    610 
    611 bool QQuickWebViewPrivate::navigatorQtObjectEnabled() const
    612 {
    613     return m_navigatorQtObjectEnabled;
    614 }
    615 
    616 void QQuickWebViewPrivate::setNavigatorQtObjectEnabled(bool enabled)
    617 {
    618     ASSERT(enabled != m_navigatorQtObjectEnabled);
    619     // FIXME: Currently we have to keep this information in both processes and the setting is asynchronous.
    620     m_navigatorQtObjectEnabled = enabled;
    621     context->setNavigatorQtObjectEnabled(webPageProxy.get(), enabled);
    622 }
    623 
    624 WebCore::IntSize QQuickWebViewPrivate::viewSize() const
    625 {
    626     return WebCore::IntSize(pageView->width(), pageView->height());
    627 }
    628 
    629 void QQuickWebViewPrivate::didReceiveMessageFromNavigatorQtObject(const String& message)
    630 {
    631     QVariantMap variantMap;
    632     variantMap.insert(QLatin1String("data"), QString(message));
    633     variantMap.insert(QLatin1String("origin"), q_ptr->url());
    634     emit q_ptr->experimental()->messageReceived(variantMap);
     620    position = QPoint();
     621    contentsSize = QSize();
    635622}
    636623
     
    675662}
    676663
    677 void QQuickWebViewExperimental::setUseTraditionalDesktopBehaviour(bool enable)
    678 {
    679     Q_D(QQuickWebView);
    680 
    681     if (enable == d->pageView->usesTraditionalDesktopBehaviour())
    682         return;
    683 
    684     d->setUseTraditionalDesktopBehaviour(enable);
    685 }
    686 
    687664void QQuickWebViewExperimental::setRenderToOffscreenBuffer(bool enable)
    688665{
     
    695672    Q_D(const QQuickWebView);
    696673    return d->renderToOffscreenBuffer();
     674}
     675
     676void QQuickWebViewExperimental::setFlickableViewportEnabled(bool enable)
     677{
     678    s_flickableViewportEnabled = enable;
     679}
     680
     681bool QQuickWebViewExperimental::flickableViewportEnabled()
     682{
     683    return s_flickableViewportEnabled;
    697684}
    698685
     
    804791    d->itemSelector = itemSelector;
    805792    emit itemSelectorChanged();
    806 }
    807 
    808 bool QQuickWebViewExperimental::useTraditionalDesktopBehaviour() const
    809 {
    810     Q_D(const QQuickWebView);
    811     return d->pageView->usesTraditionalDesktopBehaviour();
    812793}
    813794
     
    900881QQuickWebView::QQuickWebView(QQuickItem* parent)
    901882    : QQuickItem(parent)
    902     , d_ptr(new QQuickWebViewPrivate(this))
     883    , d_ptr(createPrivateObject(this))
    903884    , m_experimental(new QQuickWebViewExperimental(this))
    904885{
     
    909890QQuickWebView::QQuickWebView(WKContextRef contextRef, WKPageGroupRef pageGroupRef, QQuickItem* parent)
    910891    : QQuickItem(parent)
    911     , d_ptr(new QQuickWebViewPrivate(this))
     892    , d_ptr(createPrivateObject(this))
    912893    , m_experimental(new QQuickWebViewExperimental(this))
    913894{
     
    10851066    Q_D(QQuickWebView);
    10861067    QQuickItem::geometryChanged(newGeometry, oldGeometry);
    1087     if (newGeometry.size() != oldGeometry.size()) {
    1088         if (d->pageView->usesTraditionalDesktopBehaviour())
    1089             d->updateDesktopViewportSize();
    1090         else
    1091             d->updateTouchViewportSize();
    1092     }
     1068    if (newGeometry.size() != oldGeometry.size())
     1069        d->updateViewportSize();
    10931070}
    10941071
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h

    r106362 r106658  
    214214    Q_PROPERTY(QDeclarativeComponent* itemSelector READ itemSelector WRITE setItemSelector NOTIFY itemSelectorChanged)
    215215    Q_PROPERTY(QWebPreferences* preferences READ preferences CONSTANT FINAL)
    216     Q_PROPERTY(bool useTraditionalDesktopBehaviour READ useTraditionalDesktopBehaviour WRITE setUseTraditionalDesktopBehaviour)
    217216    Q_PROPERTY(QWebViewportInfo* viewportInfo READ viewportInfo CONSTANT FINAL)
    218217    Q_PROPERTY(QDeclarativeListProperty<QQuickUrlSchemeDelegate> urlSchemeDelegates READ schemeDelegates)
     
    239238    QDeclarativeComponent* itemSelector() const;
    240239    void setItemSelector(QDeclarativeComponent*);
    241     bool useTraditionalDesktopBehaviour() const;
    242     void setUseTraditionalDesktopBehaviour(bool enable);
    243240
    244241    QWebViewportInfo* viewportInfo();
     
    259256    bool renderToOffscreenBuffer() const;
    260257    void setRenderToOffscreenBuffer(bool enable);
     258    static void setFlickableViewportEnabled(bool enable);
     259    static bool flickableViewportEnabled();
    261260
    262261public Q_SLOTS:
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h

    r106362 r106658  
    6262    static QQuickWebViewPrivate* get(QQuickWebView* q) { return q->d_ptr.data(); }
    6363
    64     QQuickWebViewPrivate(QQuickWebView* viewport);
    6564    virtual ~QQuickWebViewPrivate();
    6665
    67     void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
    68 
    69     void initializeTouch(QQuickWebView* viewport);
    70     void initializeDesktop(QQuickWebView* viewport);
     66    virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
     67
    7168    void enableMouseEvents();
    7269    void disableMouseEvents();
    7370
    74     void loadDidCommit();
    75 
    76     void didFinishFirstNonEmptyLayout();
    77     void didChangeViewportProperties(const WebCore::ViewportArguments& args);
     71    virtual void loadDidCommit() { }
     72    virtual void didFinishFirstNonEmptyLayout() { }
     73    virtual void didChangeViewportProperties(const WebCore::ViewportArguments& args) { }
    7874    void didChangeBackForwardList();
    7975
    8076    void setNeedsDisplay();
    8177
    82     void updateDesktopViewportSize();
     78    virtual QtViewportInteractionEngine* viewportInteractionEngine() { return 0; }
     79    virtual void updateViewportSize() { }
    8380    void updateTouchViewportSize();
    84     QtViewportInteractionEngine::Constraints computeViewportConstraints();
    85 
    86     void _q_updateVisibleContentRectAndScale();
    87 
    88     void _q_suspend();
    89     void _q_resume();
     81    virtual void _q_updateVisibleContentRectAndScale() { }
     82
     83    virtual void _q_suspend() { }
     84    virtual void _q_resume() { }
    9085    void _q_viewportTrajectoryVectorChanged(const QPointF&);
    9186    void _q_onOpenPanelFilesSelected();
     
    10398    bool handleCertificateVerificationRequest(const QString& hostname);
    10499
    105     void setUseTraditionalDesktopBehaviour(bool enable);
    106100    void setRenderToOffscreenBuffer(bool enable) { m_renderToOffscreenBuffer = enable; }
    107101    void setViewInAttachedProperties(QObject*);
     
    115109    WebCore::IntSize viewSize() const;
    116110    void didReceiveMessageFromNavigatorQtObject(const String& message);
    117     void pageDidRequestScroll(const QPoint& pos);
    118     void didChangeContentsSize(const QSize& newSize);
     111    virtual void pageDidRequestScroll(const QPoint& pos) { }
     112    virtual void didChangeContentsSize(const QSize& newSize) { }
    119113    void processDidCrash();
    120114    void didRelaunchProcess();
    121115    PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
    122116    void handleDownloadRequest(DownloadProxy*);
     117
     118protected:
     119    QQuickWebViewPrivate(QQuickWebView* viewport);
     120    RefPtr<QtWebContext> context;
     121    RefPtr<WebKit::WebPageProxy> webPageProxy;
     122
     123    QtPageClient pageClient;
     124    QtWebUndoController undoController;
     125    OwnPtr<QWebNavigationHistory> navigationHistory;
     126    OwnPtr<QWebPreferences> preferences;
     127
     128    QScopedPointer<QtWebPageLoadClient> pageLoadClient;
     129    QScopedPointer<QtWebPagePolicyClient> pagePolicyClient;
     130    QScopedPointer<QtWebPageUIClient> pageUIClient;
     131
     132    QScopedPointer<QQuickWebPage> pageView;
     133    QQuickWebView* q_ptr;
     134
     135    QDeclarativeComponent* alertDialog;
     136    QDeclarativeComponent* confirmDialog;
     137    QDeclarativeComponent* promptDialog;
     138    QDeclarativeComponent* authenticationDialog;
     139    QDeclarativeComponent* certificateVerificationDialog;
     140    QDeclarativeComponent* itemSelector;
     141
     142    WebCore::ViewportArguments viewportArguments;
     143    QFileDialog* fileDialog;
     144    WKOpenPanelResultListenerRef openPanelResultListener;
     145
     146    bool m_navigatorQtObjectEnabled;
     147    bool m_renderToOffscreenBuffer;
     148    QUrl m_iconURL;
     149};
     150
     151class QQuickWebViewLegacyPrivate : public QQuickWebViewPrivate {
     152    Q_DECLARE_PUBLIC(QQuickWebView)
     153public:
     154    QQuickWebViewLegacyPrivate(QQuickWebView* viewport);
     155    virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
     156
     157    virtual void updateViewportSize();
     158};
     159
     160class QQuickWebViewFlickablePrivate : public QQuickWebViewPrivate {
     161    Q_DECLARE_PUBLIC(QQuickWebView)
     162public:
     163    QQuickWebViewFlickablePrivate(QQuickWebView* viewport);
     164    virtual ~QQuickWebViewFlickablePrivate();
     165    virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
     166
     167    virtual void loadDidCommit();
     168    virtual void didFinishFirstNonEmptyLayout();
     169    virtual void didChangeViewportProperties(const WebCore::ViewportArguments& args);
     170    virtual QtViewportInteractionEngine* viewportInteractionEngine() { return interactionEngine.data(); }
     171    virtual void updateViewportSize();
     172    virtual void _q_updateVisibleContentRectAndScale();
     173    virtual void _q_suspend();
     174    virtual void _q_resume();
     175
     176    virtual void pageDidRequestScroll(const QPoint& pos);
     177    virtual void didChangeContentsSize(const QSize& newSize);
     178
     179    QtViewportInteractionEngine::Constraints computeViewportConstraints();
    123180
    124181private:
     
    128185    class PostTransitionState {
    129186    public:
    130         PostTransitionState(QQuickWebViewPrivate* parent)
     187        PostTransitionState(QQuickWebViewFlickablePrivate* parent)
    131188            : p(parent)
    132189        { }
     
    134191        void apply();
    135192
    136         QQuickWebViewPrivate* p;
     193        QQuickWebViewFlickablePrivate* p;
    137194        QSize contentsSize;
    138195        QPoint position;
    139196    };
    140197
    141     RefPtr<QtWebContext> context;
    142     RefPtr<WebKit::WebPageProxy> webPageProxy;
    143 
    144     QtPageClient pageClient;
    145     QtWebUndoController undoController;
    146     OwnPtr<QWebNavigationHistory> navigationHistory;
    147     OwnPtr<QWebPreferences> preferences;
    148 
    149     QScopedPointer<QtWebPageLoadClient> pageLoadClient;
    150     QScopedPointer<QtWebPagePolicyClient> pagePolicyClient;
    151     QScopedPointer<QtWebPageUIClient> pageUIClient;
    152 
    153     QScopedPointer<QQuickWebPage> pageView;
    154198    QScopedPointer<QtViewportInteractionEngine> interactionEngine;
    155 
    156     QQuickWebView* q_ptr;
    157 
    158     QDeclarativeComponent* alertDialog;
    159     QDeclarativeComponent* confirmDialog;
    160     QDeclarativeComponent* promptDialog;
    161     QDeclarativeComponent* authenticationDialog;
    162     QDeclarativeComponent* certificateVerificationDialog;
    163     QDeclarativeComponent* itemSelector;
    164 
    165     WebCore::ViewportArguments viewportArguments;
    166199    OwnPtr<PostTransitionState> postTransitionState;
    167     QFileDialog* fileDialog;
    168     WKOpenPanelResultListenerRef openPanelResultListener;
    169 
    170200    bool isTransitioningToNewPage;
    171201    bool pageIsSuspended;
    172     bool m_navigatorQtObjectEnabled;
    173     bool m_renderToOffscreenBuffer;
    174     QUrl m_iconURL;
    175202};
    176203
  • trunk/Source/WebKit2/UIProcess/API/qt/qwebviewportinfo.cpp

    r106656 r106658  
    4444QVariant QWebViewportInfo::currentScale() const
    4545{
    46     if (!m_webViewPrivate->interactionEngine)
    47         return QVariant();
     46    if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
     47        return interactionEngine->currentCSSScale();
    4848
    49     return m_webViewPrivate->interactionEngine->currentCSSScale();
     49    return QVariant();
    5050}
    5151
    5252QVariant QWebViewportInfo::devicePixelRatio() const
    5353{
    54     if (!m_webViewPrivate->interactionEngine)
    55         return QVariant();
     54    if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
     55        return interactionEngine->constraints().devicePixelRatio;
    5656
    57     return m_webViewPrivate->interactionEngine->constraints().devicePixelRatio;
     57    return QVariant();
    5858}
    5959
    6060QVariant QWebViewportInfo::initialScale() const
    6161{
    62     if (!m_webViewPrivate->interactionEngine)
    63         return QVariant();
     62    if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
     63        return interactionEngine->constraints().initialScale;
    6464
    65     return m_webViewPrivate->interactionEngine->constraints().initialScale;
     65    return QVariant();
    6666}
    6767
    6868QVariant QWebViewportInfo::minimumScale() const
    6969{
    70     if (!m_webViewPrivate->interactionEngine)
    71         return QVariant();
     70    if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
     71        return interactionEngine->constraints().minimumScale;
    7272
    73     return m_webViewPrivate->interactionEngine->constraints().minimumScale;
     73    return QVariant();
    7474}
    7575
    7676QVariant QWebViewportInfo::maximumScale() const
    7777{
    78     if (!m_webViewPrivate->interactionEngine)
    79         return QVariant();
     78    if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
     79        return interactionEngine->constraints().maximumScale;
    8080
    81     return m_webViewPrivate->interactionEngine->constraints().maximumScale;
     81    return QVariant();
    8282}
    8383
    8484QVariant QWebViewportInfo::isScalable() const
    8585{
    86     if (!m_webViewPrivate->interactionEngine)
    87         return QVariant();
     86    if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
     87        return interactionEngine->constraints().isUserScalable;
    8888
    89     return m_webViewPrivate->interactionEngine->constraints().isUserScalable;
     89    return QVariant();
    9090}
    9191
    9292QVariant QWebViewportInfo::layoutSize() const
    9393{
    94     if (!m_webViewPrivate->interactionEngine)
    95         return QVariant();
     94    if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
     95        return interactionEngine->constraints().layoutSize;
    9696
    97     return m_webViewPrivate->interactionEngine->constraints().layoutSize;
     97    return QVariant();
    9898}
    9999
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/publicapi/publicapi.pro

    r105498 r106658  
    11include(../tests.pri)
     2SOURCES += $${TARGET}.cpp
    23CONFIG += qtwebkit-private
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_itemSelector.qml

    r106656 r106658  
    44import QtWebKit.experimental 3.0
    55
    6 // FIXME: used because we want to have mouseClick() to open the <select> tag. We can remove this
     6// FIXME: Moved to Desktop tests because we want to have mouseClick() to open the <select> tag. We can move it back
    77// when TestCase starts supporting touch events, see https://bugreports.qt.nokia.com/browse/QTBUG-23083.
    8 import "../DesktopBehavior"
    9 
    10 DesktopWebView {
     8WebView {
    119    id: webView
    1210
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_linkHovered.qml

    r101162 r106658  
    33import QtWebKit 3.0
    44
    5 DesktopWebView {
     5WebView {
    66    id: webView
    77    width: 200
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_loadHtml.qml

    r101162 r106658  
    33import QtWebKit 3.0
    44
    5 DesktopWebView {
     5WebView {
    66    id: webView
    77    width: 200
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_messaging.qml

    r102948 r106658  
    55
    66Item {
    7     DesktopWebView {
     7    WebView {
    88        id: webView
    99        property variant lastMessage
     
    1414    }
    1515
    16     DesktopWebView {
     16    WebView {
    1717        id: otherWebView
    1818        property variant lastMessage
     
    2323    }
    2424
    25     DesktopWebView {
     25    WebView {
    2626        id: disabledWebView
    2727        property bool receivedMessage
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_navigationRequested.qml

    r103330 r106658  
    1212    property url endUrl: Qt.resolvedUrl("../common/test1.html")
    1313
    14     DesktopWebView {
     14    WebView {
    1515        id: webView
    1616        width: 200
     
    5252    }
    5353
    54     DesktopWebView {
     54    WebView {
    5555        id: otherWebView
    5656    }
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro

    r106656 r106658  
    11include(../tests.pri)
     2SOURCES += tst_qmltests.cpp
     3TARGET = tst_qmltests_WebView
     4OBJECTS_DIR = obj_WebView/$$activeBuildConfig()
    25
    36CONFIG += qtwebkit-private
     
    710QT += qmltest
    811
    9 # QML files tested are the ones in WebKit source repository.
    10 DEFINES += QUICK_TEST_SOURCE_DIR=\"\\\"$$PWD\\\"\"
     12# Test the QML files under WebView in the source repository.
     13DEFINES += QUICK_TEST_SOURCE_DIR=\"\\\"$$PWD$${QMAKE_DIR_SEP}WebView\\\"\"
    1114DEFINES += IMPORT_DIR=\"\\\"$${ROOT_BUILD_DIR}$${QMAKE_DIR_SEP}imports\\\"\"
    1215
    1316OTHER_FILES += \
    14     DesktopBehavior/DesktopWebView.qml \
    15     DesktopBehavior/tst_linkHovered.qml \
    16     DesktopBehavior/tst_loadHtml.qml \
    17     DesktopBehavior/tst_messaging.qml \
    18     DesktopBehavior/tst_navigationRequested.qml \
    1917    WebView/tst_favIconLoad.qml \
    2018    WebView/tst_download.qml \
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/qmltests.pro

    r104287 r106658  
    1 include(../tests.pri)
     1TEMPLATE = subdirs
    22
    3 CONFIG += qtwebkit-private
    4 CONFIG += warn_on testcase
    5 
    6 QT -= testlib
    7 QT += qmltest
    8 
    9 # QML files tested are the ones in WebKit source repository.
    10 DEFINES += QUICK_TEST_SOURCE_DIR=\"\\\"$$PWD\\\"\"
    11 DEFINES += IMPORT_DIR=\"\\\"$${ROOT_BUILD_DIR}$${QMAKE_DIR_SEP}imports\\\"\"
    12 
    13 OTHER_FILES += \
    14     DesktopBehavior/DesktopWebView.qml \
    15     DesktopBehavior/tst_linkHovered.qml \
    16     DesktopBehavior/tst_loadHtml.qml \
    17     DesktopBehavior/tst_messaging.qml \
    18     DesktopBehavior/tst_navigationRequested.qml \
    19     WebView/tst_favIconLoad.qml \
    20     WebView/tst_download.qml \
    21     WebView/tst_geopermission.qml \
    22     WebView/tst_itemSelector.qml \
    23     WebView/tst_javaScriptDialogs.qml \
    24     WebView/tst_loadFail.qml \
    25     WebView/tst_loadIgnore.qml \
    26     WebView/tst_loadHtml.qml \
    27     WebView/tst_loadProgress.qml \
    28     WebView/tst_loadProgressSignal.qml \
    29     WebView/tst_preferences.qml \
    30     WebView/tst_properties.qml \
    31     WebView/tst_titleChanged.qml \
    32     WebView/tst_applicationScheme.qml
     3SUBDIRS += DesktopBehavior.pro WebView.pro
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp

    r105991 r106658  
    2121#include "../util.h"
    2222
     23#include "qquickwebview_p.h"
    2324#include <QVarLengthArray>
    2425#include <QtQuickTest/quicktest.h>
     
    4445    QApplication app(argc, argv);
    4546    qmlRegisterType<ByteArrayTestData>("Test", 1, 0, "ByteArrayTestData");
     47
     48#ifdef DISABLE_FLICKABLE_VIEWPORT
     49    QQuickWebViewExperimental::setFlickableViewportEnabled(false);
     50#endif
    4651    return quick_test_main(argc, argv, "qmltests", 0, QUICK_TEST_SOURCE_DIR);
    4752}
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro

    r100602 r106658  
    11include(../tests.pri)
     2SOURCES += $${TARGET}.cpp
    23CONFIG += qtwebkit-private
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/tests.pri

    r105991 r106658  
    66HEADERS += ../bytearraytestdata.h
    77
    8 SOURCES += $${TARGET}.cpp \
    9            ../util.cpp \
     8SOURCES += ../util.cpp \
    109           ../bytearraytestdata.cpp
    1110INCLUDEPATH += $$PWD
  • trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp

    r105893 r106658  
    8888QtWebPageEventHandler::QtWebPageEventHandler(WKPageRef pageRef, QQuickWebPage* qmlWebPage, QQuickWebView* qmlWebView)
    8989    : m_webPageProxy(toImpl(pageRef))
     90    , m_interactionEngine(0)
    9091    , m_panGestureRecognizer(this)
    9192    , m_pinchGestureRecognizer(this)
  • trunk/Tools/ChangeLog

    r106650 r106658  
     12012-02-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>
     2
     3        [Qt] Split QQuickWebViewPrivate in two classes, for desktop and touch behavior.
     4        https://bugs.webkit.org/show_bug.cgi?id=77632
     5
     6        Reviewed by Kenneth Rohde Christiansen.
     7
     8        * MiniBrowser/qt/BrowserWindow.cpp:
     9        (BrowserWindow::BrowserWindow):
     10        * MiniBrowser/qt/MiniBrowserApplication.cpp:
     11        (MiniBrowserApplication::sendTouchEvent):
     12        (MiniBrowserApplication::handleUserOptions):
     13        * MiniBrowser/qt/MiniBrowserApplication.h:
     14        (WindowOptions):
     15        (WindowOptions::WindowOptions):
     16        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
     17        (WTR::PlatformWebView::PlatformWebView):
     18        * WebKitTestRunner/qt/main.cpp:
     19        (main):
     20        * qmake/mkspecs/features/default_post.prf:
     21
    1222012-02-03  Simon Hausmann  <simon.hausmann@nokia.com>
    223
  • trunk/Tools/MiniBrowser/qt/BrowserWindow.cpp

    r106231 r106658  
    5555    connect(rootObject(), SIGNAL(pageTitleChanged(QString)), this, SLOT(setWindowTitle(QString)));
    5656    connect(rootObject(), SIGNAL(newWindow(QString)), this, SLOT(newWindow(QString)));
    57     if (options->useTraditionalDesktopBehavior())
    58         webView()->experimental()->setUseTraditionalDesktopBehaviour(true);
    5957    if (options->startFullScreen())
    6058        showFullScreen();
  • trunk/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp

    r106356 r106658  
    3030
    3131#include "BrowserWindow.h"
     32#include "qquickwebview_p.h"
    3233#include "utils.h"
    3334#include <QRegExp>
     
    183184
    184185    bool holdingControl = QApplication::keyboardModifiers().testFlag(Qt::ControlModifier);
    185     if (!m_windowOptions.useTraditionalDesktopBehavior())
     186    if (QQuickWebViewExperimental::flickableViewportEnabled())
    186187        browserWindow->updateVisualMockTouchPoints(holdingControl ? m_touchPoints.values() : QList<QWindowSystemInterface::TouchPoint>());
    187188
     
    221222
    222223    const bool useDesktopBehavior = takeOptionFlag(&args, "--desktop");
     224    QQuickWebViewExperimental::setFlickableViewportEnabled(!useDesktopBehavior);
    223225    if (!useDesktopBehavior)
    224226        qputenv("QT_WEBKIT_USE_MOBILE_THEME", QByteArray("1"));
    225     m_windowOptions.setUseTraditionalDesktopBehavior(useDesktopBehavior);
    226227    m_windowOptions.setPrintLoadedUrls(takeOptionFlag(&args, "-v"));
    227228    m_windowOptions.setStartMaximized(takeOptionFlag(&args, "--maximize"));
  • trunk/Tools/MiniBrowser/qt/MiniBrowserApplication.h

    r104556 r106658  
    4444    Q_OBJECT
    4545    Q_PROPERTY(bool printLoadedUrls READ printLoadedUrls)
    46     Q_PROPERTY(bool useTraditionalDesktopBehavior READ useTraditionalDesktopBehavior)
    4746    Q_PROPERTY(bool startMaximized READ startMaximized)
    4847    Q_PROPERTY(bool touchMockingEnabled READ touchMockingEnabled WRITE setTouchMockingEnabled NOTIFY touchMockingEnabledChanged)
     
    5251        : QObject(parent)
    5352        , m_printLoadedUrls(false)
    54         , m_useTraditionalDesktopBehavior(false)
    5553        , m_startMaximized(false)
    5654        , m_touchMockingEnabled(true)
     
    6159    void setPrintLoadedUrls(bool enabled) { m_printLoadedUrls = enabled; }
    6260    bool printLoadedUrls() const { return m_printLoadedUrls; }
    63     void setUseTraditionalDesktopBehavior(bool enabled) { m_useTraditionalDesktopBehavior = enabled; }
    64     bool useTraditionalDesktopBehavior() const { return m_useTraditionalDesktopBehavior; }
    6561    void setStartMaximized(bool enabled) { m_startMaximized = enabled; }
    6662    bool startMaximized() const { return m_startMaximized; }
     
    8379private:
    8480    bool m_printLoadedUrls;
    85     bool m_useTraditionalDesktopBehavior;
    8681    bool m_startMaximized;
    8782    bool m_startFullScreen;
  • trunk/Tools/WebKitTestRunner/qt/PlatformWebViewQt.cpp

    r106250 r106658  
    7676{
    7777    QQuickWebViewExperimental experimental(m_view);
    78     experimental.setUseTraditionalDesktopBehaviour(true);
    7978    experimental.setRenderToOffscreenBuffer(true);
    8079}
  • trunk/Tools/WebKitTestRunner/qt/main.cpp

    r100610 r106658  
    2828
    2929#include "TestController.h"
     30#include "qquickwebview_p.h"
    3031
    3132#include <stdio.h>
     
    9293    }
    9394
     95    QQuickWebViewExperimental::setFlickableViewportEnabled(false);
    9496    QApplication app(argc, argv);
    9597    Launcher launcher(argc, argv);
  • trunk/Tools/qmake/mkspecs/features/default_post.prf

    r105398 r106658  
    7777MOC_DIR = moc
    7878RCC_DIR = rcc
    79 OBJECTS_DIR = obj/$$activeBuildConfig()
     79isEmpty(OBJECTS_DIR): OBJECTS_DIR = obj/$$activeBuildConfig()
    8080
    8181# General default build tweaks
Note: See TracChangeset for help on using the changeset viewer.