[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.21-584-g1e41756

eric at webkit.org eric at webkit.org
Fri Feb 26 22:16:24 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit 43487ce595eab2824bb8a3ed2ff58d5c4e210cd1
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Feb 10 01:43:58 2010 +0000

    2010-02-09  Andreas Kling  <andreas.kling at nokia.com>
    
            Reviewed by Kenneth Rohde Christiansen.
    
            [Qt] Sync with API changes in Maemo 5 kinetic scrolling
    
            https://bugs.webkit.org/show_bug.cgi?id=34747
    
            This is a forward-port of http://qt.gitorious.org/+qt-developers/qt/x11-maemo/commit/08497561
    
            * Api/qwebview.cpp:
            (qt_sendSpontaneousEvent):
            (QWebViewKineticScroller::QWebViewKineticScroller):
            (QWebViewKineticScroller::setWidget):
            (QWebViewKineticScroller::eventFilter):
            (QWebViewKineticScroller::cancelLeftMouseButtonPress):
            (QWebViewKineticScroller::currentFrame):
            (QWebViewKineticScroller::scrollingFrameAt):
            (QWebViewKineticScroller::maximumScrollPosition):
            (QWebViewKineticScroller::scrollPosition):
            (QWebViewKineticScroller::viewportSize):
            (QWebViewKineticScroller::setScrollPosition):
            (QWebViewKineticScroller::sendEvent):
            (QWebView::QWebView):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@54575 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/qt/Api/qwebview.cpp b/WebKit/qt/Api/qwebview.cpp
index b5a5a90..79c16c7 100644
--- a/WebKit/qt/Api/qwebview.cpp
+++ b/WebKit/qt/Api/qwebview.cpp
@@ -60,96 +60,141 @@ void QWebViewPrivate::_q_pageDestroyed()
 
 #ifdef Q_WS_MAEMO_5
 #include "qabstractkineticscroller.h"
+#include "qapplication.h"
 
-class QWebViewKineticScroller : public QAbstractKineticScroller {
+// QCoreApplication::sendSpontaneousEvent() is private, hence this friend wrapper
+bool qt_sendSpontaneousEvent(QObject* receiver, QEvent* ev)
+{
+    return QCoreApplication::sendSpontaneousEvent(receiver, ev);
+}
+
+class QWebViewKineticScroller : public QObject, public QAbstractKineticScroller {
 public:
-    QWebViewKineticScroller() : QAbstractKineticScroller() {}
-    // remember the frame where the button was pressed
+    QWebViewKineticScroller()
+        : QObject()
+        , QAbstractKineticScroller()
+        , m_view(0)
+        , m_ignoreEvents(false)
+    {
+    }
+
+    void setWidget(QWebView* widget)
+    {
+        if (m_view) {
+            m_view->removeEventFilter(this);
+            QWebFrame* frame = m_view->page()->mainFrame();
+            frame->setScrollBarPolicy(Qt::Vertical, m_oldVerticalScrollBarPolicy);
+            frame->setScrollBarPolicy(Qt::Horizontal, m_oldHorizontalScrollBarPolicy);
+        }
+
+        m_view = widget;
+        setParent(m_view);
+        if (m_view) {
+            QWebFrame* frame = m_view->page()->mainFrame();
+            m_oldHorizontalScrollBarPolicy = frame->scrollBarPolicy(Qt::Horizontal);
+            m_oldVerticalScrollBarPolicy = frame->scrollBarPolicy(Qt::Vertical);
+            frame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
+            frame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
+            m_view->installEventFilter(this);
+        }
+    }
+
+protected:
     bool eventFilter(QObject* o, QEvent* ev)
     {
+        if (!o || m_view != o || m_ignoreEvents || !m_view->isEnabled())
+            return QObject::eventFilter(o, ev);
+
+        bool res = false;
+
         switch (ev->type()) {
         case QEvent::MouseButtonPress: {
+            // remember the frame where the button was pressed
             QWebFrame* hitFrame = scrollingFrameAt(static_cast<QMouseEvent*>(ev)->pos());
             if (hitFrame)
                 m_frame = hitFrame;
-            break;
+            // fall through
         }
+        case QEvent::MouseMove:
+        case QEvent::MouseButtonRelease:
+        case QEvent::MouseButtonDblClick:
+            res = handleMouseEvent(static_cast<QMouseEvent*>(ev));
+            break;
         default:
             break;
         }
-        return QAbstractKineticScroller::eventFilter(o, ev);
+        return res ? true : QObject::eventFilter(o, ev);
     }
 
-protected:
-    QWebFrame* currentFrame() const
+    void cancelLeftMouseButtonPress(const QPoint& /* globalPressPos */)
     {
-        if (!m_frame.isNull())
-            return m_frame.data();
-
-        QWebView* view = static_cast<QWebView*>(widget());
-        QWebFrame* frame = view->page()->mainFrame();
-        return frame;
+        QMouseEvent cmem(QEvent::MouseMove, QPoint(-INT_MAX, -INT_MAX), Qt::LeftButton, QApplication::mouseButtons() | Qt::LeftButton, QApplication::keyboardModifiers());
+        sendEvent(m_view, &cmem);
+        QMouseEvent cmer(QEvent::MouseButtonRelease, QPoint(-INT_MAX, -INT_MAX), Qt::LeftButton, QApplication::mouseButtons() & ~Qt::LeftButton, QApplication::keyboardModifiers());
+        sendEvent(m_view, &cmer);
     }
 
-    // Returns the innermost frame at the given position that can scroll.
-    QWebFrame* scrollingFrameAt(const QPoint& pos) const
+    QWebFrame* currentFrame() 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();
+        if (m_frame)
+            return m_frame;
 
-        while (hitFrame && range.width() <= 1 && range.height() <= 1)
-            hitFrame = hitFrame->parentFrame();
+        if (m_view)
+            return m_view->page()->mainFrame();
 
-        return hitFrame;
+        return 0;
     }
 
-    void attachToWidget()
+    // 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();
-        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);
-    }
+        QWebFrame* hitFrame = 0;
+        if (m_view) {
+            QWebFrame* frame = m_view->page()->mainFrame();
+            hitFrame = frame->hitTestContent(pos).frame();
+            QSize range = hitFrame->contentsSize() - hitFrame->geometry().size();
 
-    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);
+            while (hitFrame && range.width() <= 1 && range.height() <= 1)
+                hitFrame = hitFrame->parentFrame();
+
+            return hitFrame;
+        }
     }
 
-    QRect positionRange() const
+    QPoint maximumScrollPosition() const
     {
-        QRect r;
         QWebFrame* frame = currentFrame();
-        r.setSize(frame->contentsSize() - frame->geometry().size());
-        return r;
+        QSize s = frame ? frame->contentsSize() - frame->geometry().size() : QSize(0, 0);
+        return QPoint(qMax(0, s.width()), qMax(0, s.height()));
     }
 
-    QPoint position() const
+    QPoint scrollPosition() const
     {
         QWebFrame* frame = currentFrame();
-        return frame->scrollPosition();
+        return frame ? frame->scrollPosition() : QPoint();
     }
 
     QSize viewportSize() const
     {
-        return static_cast<QWebView*>(widget())->page()->viewportSize();
+        return m_view ? m_view->page()->viewportSize() : QSize();
     }
 
-    void setPosition(const QPoint& point, const QPoint& /* overShootDelta */)
+    void setScrollPosition(const QPoint& point, const QPoint& /* overShootDelta */)
     {
         QWebFrame* frame = currentFrame();
-        frame->setScrollPosition(point);
+        if (frame)
+            frame->setScrollPosition(point);
+    }
+
+    void sendEvent(QWidget* w, QEvent* ev)
+    {
+        m_ignoreEvents = true;
+        qt_sendSpontaneousEvent(w, ev);
+        m_ignoreEvents = false;
     }
 
+    QWebView* m_view;
+    bool m_ignoreEvents;
     QPointer<QWebFrame> m_frame;
     Qt::ScrollBarPolicy m_oldVerticalScrollBarPolicy;
     Qt::ScrollBarPolicy m_oldHorizontalScrollBarPolicy;
@@ -259,7 +304,7 @@ QWebView::QWebView(QWidget *parent)
 #endif
 #if defined(Q_WS_MAEMO_5)
     QAbstractKineticScroller* scroller = new QWebViewKineticScroller();
-    scroller->setWidget(this);
+    static_cast<QWebViewKineticScroller*>(scroller)->setWidget(this);
     setProperty("kineticScroller", QVariant::fromValue(scroller));
 #endif
     setAcceptDrops(true);
diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
index 48856a5..d814a2a 100644
--- a/WebKit/qt/ChangeLog
+++ b/WebKit/qt/ChangeLog
@@ -1,3 +1,28 @@
+2010-02-09  Andreas Kling  <andreas.kling at nokia.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        [Qt] Sync with API changes in Maemo 5 kinetic scrolling
+
+        https://bugs.webkit.org/show_bug.cgi?id=34747
+
+        This is a forward-port of http://qt.gitorious.org/+qt-developers/qt/x11-maemo/commit/08497561
+
+        * Api/qwebview.cpp:
+        (qt_sendSpontaneousEvent):
+        (QWebViewKineticScroller::QWebViewKineticScroller):
+        (QWebViewKineticScroller::setWidget):
+        (QWebViewKineticScroller::eventFilter):
+        (QWebViewKineticScroller::cancelLeftMouseButtonPress):
+        (QWebViewKineticScroller::currentFrame):
+        (QWebViewKineticScroller::scrollingFrameAt):
+        (QWebViewKineticScroller::maximumScrollPosition):
+        (QWebViewKineticScroller::scrollPosition):
+        (QWebViewKineticScroller::viewportSize):
+        (QWebViewKineticScroller::setScrollPosition):
+        (QWebViewKineticScroller::sendEvent):
+        (QWebView::QWebView):
+
 2010-02-09  Yael Aharon  <yael.aharon at nokia.com>
 
         Reviewed by Kenneth Rohde Christiansen.

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list