src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
child 22 79de32ba3296
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp	Mon May 03 13:17:34 2010 +0300
@@ -324,15 +324,12 @@
     }
 }
 
-static bool webframe_scrollOverflow(WebCore::Frame* frame, int dx, int dy)
+static bool webframe_scrollOverflow(WebCore::Frame* frame, int dx, int dy, const QPoint& pos)
 {
     if (!frame || !frame->document() || !frame->eventHandler())
         return false;
 
-    Node* node = frame->document()->focusedNode();
-    if (!node)
-        node = frame->document()->elementFromPoint(frame->eventHandler()->currentMousePosition().x(),
-                                                   frame->eventHandler()->currentMousePosition().y());
+    Node* node = frame->document()->elementFromPoint(pos.x(), pos.y());
     if (!node)
         return false;
 
@@ -363,6 +360,10 @@
     return (scrolledHorizontal || scrolledVertical);
 }
 
+
+
+
+
 /*!
     \class QWebFrame
     \since 4.4
@@ -1047,27 +1048,24 @@
 }
 
 /*!
-  \since 4.7
   \internal
   Scrolls nested frames starting at this frame, \a dx pixels to the right 
   and \a dy pixels downward. Both \a dx and \a dy may be negative. First attempts
-  to scroll elements with CSS overflow followed by this frame. If this 
+  to scroll elements with CSS overflow at position pos, followed by this frame. If this 
   frame doesn't scroll, attempts to scroll the parent
-
-  \sa QWebFrame::scroll
 */
-bool QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int dx, int dy)
+void QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int dx, int dy, const QPoint& pos)
 {
     Frame* frame = QWebFramePrivate::core(qFrame);
-    bool scrolledHorizontal = false;
-    bool scrolledVertical = false;
-    bool scrolledOverflow = webframe_scrollOverflow(frame, dx, dy);
 
-    if (!scrolledOverflow) {
-        if (!frame || !frame->view())
-            return false;
-
+    if (!frame || !frame->view())
+        return;
+    
+    if (!webframe_scrollOverflow(frame, dx, dy, pos)) {
         do {
+            bool scrolledHorizontal = false;
+            bool scrolledVertical = false;
+            
             IntSize scrollOffset = frame->view()->scrollOffset();
             IntPoint maxScrollOffset = frame->view()->maximumScrollPosition();
 
@@ -1083,12 +1081,12 @@
 
             if (scrolledHorizontal || scrolledVertical) {
                 frame->view()->scrollBy(IntSize(dx, dy));
-                return true;
+                return;
             }
+            
             frame = frame->tree()->parent(); 
         } while (frame && frame->view());
     }
-    return (scrolledHorizontal || scrolledVertical || scrolledOverflow);
 }
 
 /*!