diff -r 10e98eab6f85 -r a359256acfc6 webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp --- a/webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp Fri Jul 03 15:54:40 2009 +0100 +++ b/webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp Thu Aug 27 07:44:59 2009 +0300 @@ -107,6 +107,28 @@ StaticObjectsContainer::instance()->webCursor()->cursorUpdate(true); return true; } + // DOM can be changed so check if we are still inside the document + // If not reset tabbed navigation parameters to the closest point in document. + TSize contentSize = m_webView->mainFrame()->frameView()->contentSize(); + TPoint contentPos = m_webView->mainFrame()->frameView()->contentPos(); + TRect docRect = TRect(contentPos, contentSize - contentPos); + if (!docRect.Contains(m_focusPosition)) { + TInt viewW = m_webView->Rect().Width(); + TInt viewH = m_webView->Rect().Height(); + if (m_focusPosition.iX > contentSize.iWidth || + m_focusPosition.iX < contentPos.iX) { + m_focusPosition.iX = (horizontalDir == -1) ? contentPos.iX + viewW : contentPos.iX; + } + + if (m_focusPosition.iY > contentSize.iHeight || + m_focusPosition.iY < contentPos.iY) { + m_focusPosition.iY = (verticalDir == -1) ? contentPos.iY + viewH : contentPos.iY; + } + + m_selectedElementRect.SetRect(m_focusPosition.iX, m_focusPosition.iY, m_focusPosition.iX, m_focusPosition.iY); + m_node = NULL; + } + bool ret = m_firstNavigationOnPage; Frame* focusedFrame = m_webView->page()->focusController()->focusedFrame(); if (focusedFrame == NULL) focusedFrame = m_webView->page()->mainFrame(); @@ -188,7 +210,7 @@ f = f->tree()->traverseNext(); } // while ( f ) // Remember new selection - TPoint contentPos = m_webView->mainFrame()->frameView()->contentPos(); + contentPos = m_webView->mainFrame()->frameView()->contentPos(); if (selectedNode) { // Found an element to jump to m_selectedElementRect = selectedRect;