diff --git a/coreengine/animation.c b/coreengine/animation.c index 3e40a4a..fb88ab6 100644 --- a/coreengine/animation.c +++ b/coreengine/animation.c @@ -340,10 +340,10 @@ void cAnimation::Blink(void) { bool blinkOn = false; while (Running()) { Sleep(freq); - if (Running()) { + if (Running()) blinkable->DoBlink(blinkFunc, blinkOn); - blinkable->Flush(); - } + if (Running()) + blinkable->Flush(); blinkOn = !blinkOn; } } diff --git a/coreengine/area.h b/coreengine/area.h index 256feda..305ca2f 100644 --- a/coreengine/area.h +++ b/coreengine/area.h @@ -42,8 +42,8 @@ public: bool ActiveTab(void) { return activeTab; }; virtual int GetWidth(void) { return 0; }; virtual void Cache(void) {}; - virtual void StopBlinkers(void) {}; virtual void Close(void) {}; + virtual void StopBlinkers(void) {}; virtual void Clear(void) {}; virtual void Hide(void) {}; virtual void Show(void) {}; diff --git a/coreengine/osdwrapper.c b/coreengine/osdwrapper.c index 76b5bf7..011ffc8 100644 --- a/coreengine/osdwrapper.c +++ b/coreengine/osdwrapper.c @@ -64,8 +64,6 @@ void cSdOsd::DestroyPixmap(cPixmap *pix) { } void cSdOsd::Flush(void) { - Lock(); if (osd && !flushLocked) osd->Flush(); - Unlock(); } diff --git a/coreengine/view.c b/coreengine/view.c index 2aba313..0a323bc 100644 --- a/coreengine/view.c +++ b/coreengine/view.c @@ -215,11 +215,6 @@ void cView::Render(int ve, bool force) { } void cView::Close(void) { - for (int i=0; i < numViewElements; i++) { - if (!viewElements[i]) - continue; - viewElements[i]->StopBlinking(); - } delete fader; fader = NULL; delete shifter; diff --git a/coreengine/viewelement.c b/coreengine/viewelement.c index cf05733..340bd84 100644 --- a/coreengine/viewelement.c +++ b/coreengine/viewelement.c @@ -268,6 +268,7 @@ bool cViewElement::Execute(void) { void cViewElement::Clear(void) { tokenContainer->Clear(); for (cAreaNode *node = areaNodes.First(); node; node = areaNodes.Next(node)) { + node->StopBlinkers(); sdOsd->Lock(); node->Clear(); sdOsd->Unlock(); @@ -306,6 +307,7 @@ void cViewElement::Close(void) { delete detacher; detacher = NULL; for (cAreaNode *node = areaNodes.First(); node; node = areaNodes.Next(node)) { + node->StopBlinkers(); sdOsd->Lock(); node->Close(); sdOsd->Unlock(); diff --git a/coreengine/viewgrid.c b/coreengine/viewgrid.c index f19383a..6d3dd5f 100644 --- a/coreengine/viewgrid.c +++ b/coreengine/viewgrid.c @@ -136,6 +136,7 @@ void cViewGrid::ClearGrids(void) { for (int i = 0; i < gridsize; i++) { if (!grid[i]) continue; + grid[i]->StopBlinking(); grid[i]->Close(); delete grid[i]; grid[i] = NULL; diff --git a/coreengine/viewlist.c b/coreengine/viewlist.c index 86760b5..dbbe5e7 100644 --- a/coreengine/viewlist.c +++ b/coreengine/viewlist.c @@ -190,7 +190,10 @@ void cViewList::Clear(void) { if (!listElements) return; for (int i = 0; i < numElements; i++) { + listElements[i]->StopBlinking(); listElements[i]->StopScrolling(); + } + for (int i = 0; i < numElements; i++) { listElements[i]->Clear(); } } @@ -199,7 +202,10 @@ void cViewList::Close(void) { if (!listElements) return; for (int i = 0; i < numElements; i++) { + listElements[i]->StopBlinking(); listElements[i]->StopScrolling(); + } + for (int i = 0; i < numElements; i++) { listElements[i]->Close(); } }