X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FBaseDisplay.cc;h=01e1b3324826438e1583972678291c8d7c931eb1;hb=f75083669f65aadd6b32f8ed25880ca362296a2f;hp=37ef43483599be8ac0d187b595eb108b96b4de1b;hpb=eb8a11a5a7b066ada63cc3550f8314f53eaf1a39;p=chaz%2Fopenbox diff --git a/src/BaseDisplay.cc b/src/BaseDisplay.cc index 37ef4348..01e1b332 100644 --- a/src/BaseDisplay.cc +++ b/src/BaseDisplay.cc @@ -88,7 +88,6 @@ #include "i18n.h" #include "BaseDisplay.h" -#include "LinkedList.h" #include "Timer.h" #include @@ -338,11 +337,9 @@ BaseDisplay::BaseDisplay(const char *app_name, char *dpy_name) { XSetErrorHandler((XErrorHandler) handleXErrors); - timerList = new LinkedList; - screenInfoList.reserve(ScreenCount(display)); - for (int i = 0; i < number_of_screens; i++) - screenInfoList.push_back(new ScreenInfo(*this, i)); + for (unsigned int s = 0; s < number_of_screens; s++) + screenInfoList.push_back(new ScreenInfo(*this, s)); #ifndef NOCLOBBER NumLockMask = ScrollLockMask = 0; @@ -392,12 +389,7 @@ BaseDisplay::BaseDisplay(const char *app_name, char *dpy_name) { BaseDisplay::~BaseDisplay(void) { std::for_each(screenInfoList.begin(), screenInfoList.end(), PointerAssassin()); - // we don't create the BTimers, we don't delete them - while (timerList->count()) - timerList->remove(0); - - delete timerList; if (application_name != NULL) delete [] application_name; @@ -434,12 +426,13 @@ void BaseDisplay::eventLoop(void) { FD_ZERO(&rfds); FD_SET(xfd, &rfds); - if (timerList->count()) { + if (!timerList.empty()) { gettimeofday(&now, 0); tm.tv_sec = tm.tv_usec = 0l; - BTimer *timer = timerList->first(); + BTimer *timer = timerList.front(); + ASSERT(timer != NULL); tm.tv_sec = timer->getStartTime().tv_sec + timer->getTimeout().tv_sec - now.tv_sec; @@ -469,8 +462,11 @@ void BaseDisplay::eventLoop(void) { // check for timer timeout gettimeofday(&now, 0); - LinkedListIterator it(timerList); - for(BTimer *timer = it.current(); timer; it++, timer = it.current()) { + TimerList::iterator it; + for (it = timerList.begin(); it != timerList.end(); ) { + 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 + @@ -483,8 +479,12 @@ void BaseDisplay::eventLoop(void) { timer->fireTimeout(); // restart the current timer so that the start time is updated - if (! timer->doOnce()) timer->start(); - else timer->stop(); + if (! timer->doOnce()) + timer->start(); + else { + timer->stop(); +// delete timer; // USE THIS? + } } } } @@ -512,28 +512,27 @@ void BaseDisplay::grab(void) { void BaseDisplay::ungrab(void) { if (! --server_grabs) XUngrabServer(display); - - if (server_grabs < 0) server_grabs = 0; } void BaseDisplay::addTimer(BTimer *timer) { - if (! timer) return; + ASSERT(timer != (BTimer *) 0); - LinkedListIterator it(timerList); - int index = 0; - for (BTimer *tmp = it.current(); tmp; it++, index++, tmp = it.current()) + TimerList::iterator it; + for (it = timerList.begin(); it != timerList.end(); ++it) { + BTimer *tmp = *it; if ((tmp->getTimeout().tv_sec > timer->getTimeout().tv_sec) || ((tmp->getTimeout().tv_sec == timer->getTimeout().tv_sec) && (tmp->getTimeout().tv_usec >= timer->getTimeout().tv_usec))) break; + } - timerList->insert(timer, index); + timerList.insert(it, timer); } void BaseDisplay::removeTimer(BTimer *timer) { - timerList->remove(timer); + timerList.remove(timer); }