Changeset 122321 in webkit


Ignore:
Timestamp:
Jul 11, 2012 2:49:25 AM (12 years ago)
Author:
abecsi@webkit.org
Message:

[Qt][WK2] Fix wheel scrolling for simple pages
https://bugs.webkit.org/show_bug.cgi?id=90793

Reviewed by Kenneth Rohde Christiansen.

Call WebPage::setFixedLayoutSize in setResizesToContentsUsingLayoutSize
instead of setting the view size manually and scheduling a relayout.
Since setFixedLayoutSize forces a relayout it also updates the scrollbars
after the visible rect is available.
This fixes scrolling with wheel events for a QML WebView loading a simple
local page which previously ended up in a state where scrolling was disabled
because the scrollbar update happened before the correct visible rect size was
available.

Add a QML test and infrastructure to QWebKitTest to cover this case.

  • UIProcess/API/qt/qwebkittest.cpp:

(QWebKitTest::wheelEvent):

  • UIProcess/API/qt/qwebkittest_p.h:
  • UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml: Added.
  • UIProcess/API/qt/tests/qmltests/common/test4.html: Added.
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::setResizesToContentsUsingLayoutSize):

Location:
trunk/Source/WebKit2
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r122318 r122321  
     12012-07-11  Andras Becsi  <andras.becsi@nokia.com>
     2
     3        [Qt][WK2] Fix wheel scrolling for simple pages
     4        https://bugs.webkit.org/show_bug.cgi?id=90793
     5
     6        Reviewed by Kenneth Rohde Christiansen.
     7
     8        Call WebPage::setFixedLayoutSize in setResizesToContentsUsingLayoutSize
     9        instead of setting the view size manually and scheduling a relayout.
     10        Since setFixedLayoutSize forces a relayout it also updates the scrollbars
     11        after the visible rect is available.
     12        This fixes scrolling with wheel events for a QML WebView loading a simple
     13        local page which previously ended up in a state where scrolling was disabled
     14        because the scrollbar update happened before the correct visible rect size was
     15        available.
     16
     17        Add a QML test and infrastructure to QWebKitTest to cover this case.
     18
     19        * UIProcess/API/qt/qwebkittest.cpp:
     20        (QWebKitTest::wheelEvent):
     21        * UIProcess/API/qt/qwebkittest_p.h:
     22        * UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml: Added.
     23        * UIProcess/API/qt/tests/qmltests/common/test4.html: Added.
     24        * WebProcess/WebPage/WebPage.cpp:
     25        (WebKit::WebPage::setResizesToContentsUsingLayoutSize):
     26
    1272012-07-11  Andras Becsi  <andras.becsi@nokia.com>
    228
  • trunk/Source/WebKit2/UIProcess/API/qt/qwebkittest.cpp

    r121967 r122321  
    2626#include <QMutableListIterator>
    2727#include <QTouchEvent>
     28#include <QWheelEvent>
    2829#include <qpa/qwindowsysteminterface.h>
    2930
     
    114115}
    115116
     117bool QWebKitTest::wheelEvent(QObject* item, qreal x, qreal y, int delta, Qt::Orientation orient)
     118{
     119    QQuickWebView* window = qobject_cast<QQuickWebView*>(item);
     120
     121    if (!window) {
     122        qWarning("Wheel event not accepted by receiving item");
     123        return false;
     124    }
     125
     126    QWheelEvent event(QPointF(x, y), delta, Qt::NoButton, Qt::NoModifier, orient);
     127    event.setTimestamp(QDateTime::currentMSecsSinceEpoch());
     128    event.setAccepted(false);
     129
     130    window->wheelEvent(&event);
     131
     132    return event.isAccepted();
     133}
     134
    116135QSize QWebKitTest::contentsSize() const
    117136{
  • trunk/Source/WebKit2/UIProcess/API/qt/qwebkittest_p.h

    r118758 r122321  
    5757    bool touchTap(QObject* item, qreal x, qreal y, int delay = -1);
    5858    bool touchDoubleTap(QObject* item, qreal x, qreal y, int delay = -1);
     59    bool wheelEvent(QObject* item, qreal x, qreal y, int delta, Qt::Orientation orient = Qt::Vertical);
    5960
    6061public:
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r122280 r122321  
    876876        return;
    877877
    878     // Always reset even when empty.
    879     view->setFixedLayoutSize(targetLayoutSize);
    880 
    881878    m_page->settings()->setAcceleratedCompositingForFixedPositionEnabled(true);
    882879    m_page->settings()->setFixedElementsLayoutRelativeToFrame(true);
    883880    m_page->settings()->setFixedPositionCreatesStackingContext(true);
    884881
    885     // Schedule a layout to use the new target size.
    886     if (!view->layoutPending()) {
    887         view->setNeedsLayout();
    888         view->scheduleRelayout();
    889     }
     882    // Always reset even when empty. This also takes care of the relayout.
     883    setFixedLayoutSize(targetLayoutSize);
    890884}
    891885
     
    10881082    view->setUseFixedLayout(fixed);
    10891083    if (!fixed)
    1090         view->setFixedLayoutSize(IntSize());
     1084        setFixedLayoutSize(IntSize());
    10911085}
    10921086
Note: See TracChangeset for help on using the changeset viewer.