Divorce the notion of a marquee being stopped from JS from the notion of being suspe...
[WebKit-https.git] / WebCore / khtml / rendering / render_layer.cpp
index 7e27d5870b8675fe3f68405ef8f17a62f874ed4b..d377416fb2ad52a02fd01726273e21c576c49a8e 100644 (file)
@@ -1288,7 +1288,7 @@ void RenderLayer::suspendMarquees()
 
 Marquee::Marquee(RenderLayer* l)
 :m_layer(l), m_currentLoop(0), m_timerId(0), m_start(0), m_end(0), m_speed(0), m_unfurlPos(0), m_reset(false),
- m_suspended(false), m_whiteSpace(NORMAL), m_direction(MAUTO)
+ m_suspended(false), m_stopped(false), m_whiteSpace(NORMAL), m_direction(MAUTO)
 {
 }
 
@@ -1387,6 +1387,8 @@ void Marquee::start()
     if (m_timerId || m_layer->renderer()->style()->marqueeIncrement().value == 0)
         return;
     
+    m_stopped = false;
+
     if (!m_suspended) {
         if (isUnfurlMarquee()) {
             bool forward = direction() == MDOWN || direction() == MRIGHT;
@@ -1417,6 +1419,16 @@ void Marquee::suspend()
     m_suspended = true;
 }
 
+void Marquee::stop()
+{
+    if (m_timerId) {
+        killTimer(m_timerId);
+        m_timerId = 0;
+    }
+    
+    m_stopped = true;
+}
+
 void Marquee::updateMarqueePosition()
 {
     bool activate = (m_totalLoops <= 0 || m_currentLoop < m_totalLoops);
@@ -1436,7 +1448,8 @@ void Marquee::updateMarqueePosition()
             m_start = computePosition(direction(), behavior == MALTERNATE);
             m_end = computePosition(reverseDirection(), behavior == MALTERNATE || behavior == MSLIDE);
         }
-        start();
+        if (!m_stopped)
+            start();
     }
 }