--- 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 <kjs_window.h>
#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<std::pair<RefPtr<WebCore::Frame>, 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