diff -r d96eed154187 -r ca6d8a014f4b webengine/osswebengine/WebKit/s60/webview/WebView.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebView.cpp Tue Sep 14 23:23:58 2010 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebView.cpp Wed Sep 15 13:25:15 2010 +0300 @@ -102,7 +102,6 @@ #include "EventNames.h" #include "Editor.h" #include "ThumbnailGenerator.h" -#include #include "PluginHandler.h" using namespace WebCore; @@ -220,7 +219,7 @@ , m_checkerBoardGc(NULL) , m_checkerBoardDestroyTimer(NULL) , m_isPinchZoomOut(false) -, m_jsTimeouts(0) +, m_jsPaused(0) { } @@ -282,6 +281,8 @@ if (StaticObjectsContainer::instance()->webSurface()->topView() == this) StaticObjectsContainer::instance()->webSurface()->setView( NULL ); + delete m_pausedTimeouts; + } // ----------------------------------------------------------------------------- @@ -410,6 +411,8 @@ m_checkerBoardDestroyTimer = CPeriodic::NewL(CActive::EPriorityIdle); + m_pausedTimeouts = new(ELeave) Vector, KJS::PausedTimeouts*>, 16>(); + } void WebView::initializePageScalerL() @@ -3336,28 +3339,40 @@ void WebView::pauseJsTimers() { - if(m_jsTimeouts==0) { - WebCore::Frame *frame = core(mainFrame()); - KJS::Window* window = KJS::Window::retrieveWindow(frame); - if(window) { - m_jsTimeouts = window->pauseTimeouts(); + if(!m_jsPaused) { + for (Frame* frame = core(mainFrame()); frame; frame = frame->tree()->traverseNext()) { + if (KJS::Window* window = KJS::Window::retrieveWindow(frame)) { + KJS::PausedTimeouts* timeouts = window->pauseTimeouts(); + if(timeouts) + m_pausedTimeouts->append(std::make_pair(frame, timeouts)); + } } + m_jsPaused = (m_pausedTimeouts->size()) ? ETrue : EFalse; } } void WebView::resumeJsTimers() { - if(m_jsTimeouts) { - WebCore::Frame *frame = core(mainFrame()); - KJS::Window* window = KJS::Window::retrieveWindow(frame); - if(window) { - window->resumeTimeouts(m_jsTimeouts); - delete m_jsTimeouts; - m_jsTimeouts = 0; + if(m_jsPaused) { + TInt count = m_pausedTimeouts->size(); + for (size_t i = 0; i < count; i++) { + KJS::Window* window = KJS::Window::retrieveWindow(m_pausedTimeouts->at(i).first.get()); + if (window) { + window->resumeTimeouts(m_pausedTimeouts->at(i).second); + } + delete m_pausedTimeouts->at(i).second; } + m_pausedTimeouts->clear(); + m_jsPaused = EFalse; } } -// END OF FILE + +void WebView::resetJsTimers() +{ + m_jsPaused=0; + m_pausedTimeouts->clear(); +} + void WebView::scrollStatus(bool status) { if(m_scrollingstatus != status) @@ -3378,3 +3393,4 @@ scrollStatus(scrolling); } }; +// END OF FILE