Ticket #4628: ScreenSaverRunnerFix_4628.diff
File ScreenSaverRunnerFix_4628.diff, 1.7 KB (added by , 15 years ago) |
---|
-
src/kits/screensaver/ScreenSaverRunner.cpp
172 172 void 173 173 ScreenSaverRunner::_Run() 174 174 { 175 const uint32 kTickBase = 50000; 175 static const uint32 kInitialTickRate = 50000; 176 176 177 if (fWindow->Lock()) { 177 178 fView->SetViewColor(0, 0, 0); 178 179 fView->SetLowColor(0, 0, 0); … … 181 182 fWindow->Unlock(); 182 183 } 183 184 185 uint32 TickBase = kInitialTickRate; 184 186 int32 snoozeCount = 0; 185 187 int32 frame = 0; 186 188 bigtime_t lastTickTime = 0; 187 bigtime_t tick = fSaver ? fSaver->TickSize() : kTickBase;189 bigtime_t tick = fSaver ? fSaver->TickSize() : TickBase; 188 190 189 191 while (!fQuitting) { 190 192 // break the idle time up into ticks so that we can evaluate … … 192 194 // otherwise a screen saver that sets, say, a 30 second tick 193 195 // will result in the screen saver not responding to deactivation 194 196 // for that length of time 195 snooze( kTickBase);196 if (system_time() - lastTickTime < tick) 197 snooze(TickBase); 198 if (system_time() - lastTickTime < tick) { 197 199 continue; 198 else {200 } else { 199 201 // re-evaluate the tick time after each successful wakeup - 200 // screensavers can adjust it on the fly and we must be202 // screensavers can adjust it on the fly, and we must be 201 203 // prepared to accomodate that 202 tick = fSaver ? fSaver->TickSize() : kTickBase; 204 tick = fSaver ? fSaver->TickSize() : TickBase; 205 206 if (tick < TickBase) { 207 if (tick < 0) tick = 0; 208 TickBase = tick; 209 } 210 else if (TickBase < kInitialTickRate && tick >= kInitialTickRate) { 211 TickBase = kInitialTickRate; 212 } 213 203 214 lastTickTime = system_time(); 204 215 } 205 216