[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.19-706-ge5415e9

eric at webkit.org eric at webkit.org
Thu Feb 4 21:31:42 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit 7c195ea45477d1fe8260a0b257870f80b6d246eb
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Jan 29 01:49:18 2010 +0000

    2010-01-28  Andreas Kling  <andreas.kling at nokia.com>
    
            Reviewed by Kenneth Rohde Christiansen.
    
            [Qt] Support kinetic scrolling on Maemo 5
    
            https://bugs.webkit.org/show_bug.cgi?id=34267
    
            Patch by Ralf Engels <ralf.engels at nokia.com> and
            Robert Griebl <rgriebl at trolltech.com>
    
            * Api/qwebview.cpp:
            (QWebViewKineticScroller::QWebViewKineticScroller):
            (QWebViewKineticScroller::eventFilter):
            (QWebViewKineticScroller::currentFrame):
            (QWebViewKineticScroller::scrollingFrameAt):
            (QWebViewKineticScroller::attachToWidget):
            (QWebViewKineticScroller::removeFromWidget):
            (QWebViewKineticScroller::positionRange):
            (QWebViewKineticScroller::position):
            (QWebViewKineticScroller::viewportSize):
            (QWebViewKineticScroller::setPosition):
            (QWebView::QWebView):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@54034 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/qt/Api/qwebview.cpp b/WebKit/qt/Api/qwebview.cpp
index 9ef2e55..b5a5a90 100644
--- a/WebKit/qt/Api/qwebview.cpp
+++ b/WebKit/qt/Api/qwebview.cpp
@@ -58,6 +58,106 @@ void QWebViewPrivate::_q_pageDestroyed()
     view->setPage(0);
 }
 
+#ifdef Q_WS_MAEMO_5
+#include "qabstractkineticscroller.h"
+
+class QWebViewKineticScroller : public QAbstractKineticScroller {
+public:
+    QWebViewKineticScroller() : QAbstractKineticScroller() {}
+    // remember the frame where the button was pressed
+    bool eventFilter(QObject* o, QEvent* ev)
+    {
+        switch (ev->type()) {
+        case QEvent::MouseButtonPress: {
+            QWebFrame* hitFrame = scrollingFrameAt(static_cast<QMouseEvent*>(ev)->pos());
+            if (hitFrame)
+                m_frame = hitFrame;
+            break;
+        }
+        default:
+            break;
+        }
+        return QAbstractKineticScroller::eventFilter(o, ev);
+    }
+
+protected:
+    QWebFrame* currentFrame() const
+    {
+        if (!m_frame.isNull())
+            return m_frame.data();
+
+        QWebView* view = static_cast<QWebView*>(widget());
+        QWebFrame* frame = view->page()->mainFrame();
+        return frame;
+    }
+
+    // Returns the innermost frame at the given position that can scroll.
+    QWebFrame* scrollingFrameAt(const QPoint& pos) const
+    {
+        QWebView* view = static_cast<QWebView*>(widget());
+        QWebFrame* mainFrame = view->page()->mainFrame();
+        QWebFrame* hitFrame = mainFrame->hitTestContent(pos).frame();
+        QSize range = hitFrame->contentsSize() - hitFrame->geometry().size();
+
+        while (hitFrame && range.width() <= 1 && range.height() <= 1)
+            hitFrame = hitFrame->parentFrame();
+
+        return hitFrame;
+    }
+
+    void attachToWidget()
+    {
+        QWebView* view = static_cast<QWebView*>(widget());
+        QWebFrame* mainFrame = view->page()->mainFrame();
+        m_oldHorizontalScrollBarPolicy = mainFrame->scrollBarPolicy(Qt::Horizontal);
+        m_oldVerticalScrollBarPolicy = mainFrame->scrollBarPolicy(Qt::Vertical);
+        mainFrame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
+        mainFrame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
+        view->installEventFilter(this);
+    }
+
+    void removeFromWidget()
+    {
+        QWebView* view = static_cast<QWebView*>(widget());
+        view->removeEventFilter(this);
+        QWebFrame* mainFrame = view->page()->mainFrame();
+        mainFrame->setScrollBarPolicy(Qt::Vertical, m_oldVerticalScrollBarPolicy);
+        mainFrame->setScrollBarPolicy(Qt::Horizontal, m_oldHorizontalScrollBarPolicy);
+    }
+
+    QRect positionRange() const
+    {
+        QRect r;
+        QWebFrame* frame = currentFrame();
+        r.setSize(frame->contentsSize() - frame->geometry().size());
+        return r;
+    }
+
+    QPoint position() const
+    {
+        QWebFrame* frame = currentFrame();
+        return frame->scrollPosition();
+    }
+
+    QSize viewportSize() const
+    {
+        return static_cast<QWebView*>(widget())->page()->viewportSize();
+    }
+
+    void setPosition(const QPoint& point, const QPoint& /* overShootDelta */)
+    {
+        QWebFrame* frame = currentFrame();
+        frame->setScrollPosition(point);
+    }
+
+    QPointer<QWebFrame> m_frame;
+    Qt::ScrollBarPolicy m_oldVerticalScrollBarPolicy;
+    Qt::ScrollBarPolicy m_oldHorizontalScrollBarPolicy;
+};
+
+#endif // Q_WS_MAEMO_5
+
+
 /*!
     \class QWebView
     \since 4.4
@@ -157,7 +257,11 @@ QWebView::QWebView(QWidget *parent)
 #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0)
     setAttribute(Qt::WA_AcceptTouchEvents);
 #endif
-
+#if defined(Q_WS_MAEMO_5)
+    QAbstractKineticScroller* scroller = new QWebViewKineticScroller();
+    scroller->setWidget(this);
+    setProperty("kineticScroller", QVariant::fromValue(scroller));
+#endif
     setAcceptDrops(true);
 
     setMouseTracking(true);
diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
index f9aa123..1f7f201 100644
--- a/WebKit/qt/ChangeLog
+++ b/WebKit/qt/ChangeLog
@@ -1,3 +1,27 @@
+2010-01-28  Andreas Kling  <andreas.kling at nokia.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        [Qt] Support kinetic scrolling on Maemo 5
+
+        https://bugs.webkit.org/show_bug.cgi?id=34267
+
+        Patch by Ralf Engels <ralf.engels at nokia.com> and
+        Robert Griebl <rgriebl at trolltech.com>
+
+        * Api/qwebview.cpp:
+        (QWebViewKineticScroller::QWebViewKineticScroller):
+        (QWebViewKineticScroller::eventFilter):
+        (QWebViewKineticScroller::currentFrame):
+        (QWebViewKineticScroller::scrollingFrameAt):
+        (QWebViewKineticScroller::attachToWidget):
+        (QWebViewKineticScroller::removeFromWidget):
+        (QWebViewKineticScroller::positionRange):
+        (QWebViewKineticScroller::position):
+        (QWebViewKineticScroller::viewportSize):
+        (QWebViewKineticScroller::setPosition):
+        (QWebView::QWebView):
+
 2010-01-28  Kenneth Rohde Christiansen  <kenneth at webkit.org>
 
         Reviewed by Simon Hausmann.

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list