webengine/osswebengine/WebKit/s60/webview/WebPageScrollHandler.cpp
changeset 25 0ed94ceaa377
parent 5 10e98eab6f85
child 28 d39add9822e2
--- a/webengine/osswebengine/WebKit/s60/webview/WebPageScrollHandler.cpp	Tue Nov 24 09:02:20 2009 +0200
+++ b/webengine/osswebengine/WebKit/s60/webview/WebPageScrollHandler.cpp	Thu Dec 17 09:20:16 2009 +0200
@@ -17,7 +17,7 @@
 
 
 // INCLUDE FILES
-#include <Browser_platform_variant.hrh>
+#include <browser_platform_variant.hrh>
 #include <../bidi.h>
 #include "WebPageScrollHandler.h"
 #include "BrCtl.h"
@@ -372,12 +372,14 @@
             bool shouldScrollHorizontally = false;
             WebFrame* frame = kit(m_scrollableView.m_scrollingElement->document()->frame());
             RenderObject* render = m_scrollableView.m_scrollingElement->renderer();
-            __ASSERT_DEBUG(render->isScrollable(), User::Panic(_L(""), KErrGeneral));
-            if (aScrollDelta.iY)
-                shouldScrollVertically = !render->scroll(ScrollDown, ScrollByPixel, frame->frameView()->toDocCoords(aScrollDelta).iY / 100);
-            if (aScrollDelta.iX)
-                shouldScrollHorizontally = !render->scroll(ScrollRight, ScrollByPixel, frame->frameView()->toDocCoords(aScrollDelta).iX / 100);
-
+            if(render) //check if render exits before using it
+                {
+                __ASSERT_DEBUG(render->isScrollable(), User::Panic(_L(""), KErrGeneral));
+                if (aScrollDelta.iY)
+                  shouldScrollVertically = !render->scroll(ScrollDown, ScrollByPixel, frame->frameView()->toDocCoords(aScrollDelta).iY / 100);
+                if (aScrollDelta.iX)
+                  shouldScrollHorizontally = !render->scroll(ScrollRight, ScrollByPixel, frame->frameView()->toDocCoords(aScrollDelta).iX / 100);
+                }
             TPoint scrollPos = frame->frameView()->contentPos();
             TPoint newscrollDelta = frame->frameView()->toDocCoords(aScrollDelta);
             m_currentNormalizedPosition +=  newscrollDelta;     
@@ -559,25 +561,32 @@
     Element* currElement = NULL;
     if(!e) return NULL;
     RenderObject* render = e->renderer();
-    if (render && render->isScrollable()) {
+    if(render) {
         RenderLayer* layer = render->enclosingLayer();
         Element* parent = e;
-        currElement = e;
-        while (!currElement->isControl() && parent && parent->renderer() && parent->renderer()->enclosingLayer() == layer) {
-            currElement = parent;
-            Node* pn = parent;
-            do {
-                pn = pn->parent();
-            } while (pn && !pn->isElementNode());
-            parent = static_cast<Element*>(pn);
+
+        if (e->isControl()) {
+            if (render->isScrollable()) {
+            currElement = e;
+            }
+        }
+        else {
+            while (parent && parent->renderer()) {
+                if (parent->renderer()->isScrollable()) {
+                    currElement = parent;
+                    break;
+                    }
+                parent = static_cast<Element*>(parent->parent());
+                }
         }
         if (currElement) {
+            //check for current element which is scrollable
             currElement->ref();
-            m_scrollableView.m_scrollingElement = currElement; 
+            m_scrollableView.m_scrollingElement = currElement;
             m_scrollableView.m_frameView = NULL;
             return true;
+            }
         }
-    }
     return false;
 }