]> Dogcows Code - chaz/openbox/blobdiff - src/BaseDisplay.cc
make a new autoRaiseDelay value take effect without having to restart
[chaz/openbox] / src / BaseDisplay.cc
index 28742e98a59a563a5286e6454cd18550ce860ecb..c99b2b163cca819d55d1904e19254e8b6bc83ae2 100644 (file)
@@ -462,10 +462,10 @@ void BaseDisplay::eventLoop(void) {
       gettimeofday(&now, 0);
 
       TimerList::iterator it;
-      for (it = timerList.begin(); it != timerList.end(); ) {
+      for (it = timerList.begin(); it != timerList.end(); ++it) {
         BTimer *timer = *it;
-        ++it;   // the timer may be removed from the list, so move ahead now
         ASSERT(timer != NULL);
+
         tm.tv_sec = timer->getStartTime().tv_sec +
           timer->getTimeout().tv_sec;
         tm.tv_usec = timer->getStartTime().tv_usec +
@@ -478,12 +478,16 @@ void BaseDisplay::eventLoop(void) {
         timer->fireTimeout();
 
         // restart the current timer so that the start time is updated
-        if (! timer->doOnce())
+        if (! timer->doOnce()) {
+          // reorder
+          removeTimer(timer);
+          addTimer(timer);
           timer->start();
-        else {
+        } else
           timer->stop();
-//          delete timer; // USE THIS?
-        }
+        it = timerList.begin(); // we no longer have any idea if the iterator is
+                                // valid, but what was at the front() is no
+                                // longer.
       }
     }
   }
@@ -531,6 +535,7 @@ void BaseDisplay::addTimer(BTimer *timer) {
 
 
 void BaseDisplay::removeTimer(BTimer *timer) {
+  ASSERT(timer != (BTimer *) 0);
   timerList.remove(timer);
 }
 
This page took 0.022923 seconds and 4 git commands to generate.