From f33354ba5aa51208b9dc6fcf17b346ebf86355d3 Mon Sep 17 00:00:00 2001 From: louis Date: Thu, 14 May 2015 06:45:03 +0200 Subject: [PATCH] fixed bug that detached viewelements were not cleared correctly --- HISTORY | 4 ++++ views/displaychannelview.c | 6 ++++-- views/displayviewelements.h | 1 + views/view.c | 9 +++++++++ views/view.h | 1 + 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/HISTORY b/HISTORY index 3ea2e04..32255a9 100644 --- a/HISTORY +++ b/HISTORY @@ -316,3 +316,7 @@ Version 0.4.5 - added {numtimers} Token to lastrecordings viewelement - fixed time display bug in displaymenurecordings - added token {watched} to displaymenurecordings +- fixed bug that scrapercontent in displaychannel was not + updated if detached +- fixed bug that detached viewelements were not cleared + correctly \ No newline at end of file diff --git a/views/displaychannelview.c b/views/displaychannelview.c index bcb7ad8..986ee39 100644 --- a/views/displaychannelview.c +++ b/views/displaychannelview.c @@ -354,14 +354,16 @@ void cDisplayChannelView::DrawScraperContent(const cEvent *event) { } if (DetachViewElement(veScraperContent)) { - cViewElement *viewElement = GetViewElement(veScraperContent); + cViewElementScraperContent *viewElement = dynamic_cast(GetViewElement(veScraperContent)); if (!viewElement) { viewElement = new cViewElementScraperContent(event, ctPosterBanner, tmplView->GetViewElement(veScraperContent)); AddViewElement(veScraperContent, viewElement); viewElement->Start(); } else { - if (!viewElement->Starting()) + if (!viewElement->Starting()) { + viewElement->SetEvent(event); viewElement->Render(); + } } } else { map < string, string > stringTokens; diff --git a/views/displayviewelements.h b/views/displayviewelements.h index cb02c39..0dcd45b 100644 --- a/views/displayviewelements.h +++ b/views/displayviewelements.h @@ -27,6 +27,7 @@ private: public: cViewElementScraperContent(const cEvent *event, ScraperContentType type, cTemplateViewElement *tmplViewElement); virtual ~cViewElementScraperContent() {}; + void SetEvent(const cEvent *event) { this->event = event; }; bool Render(void); }; diff --git a/views/view.c b/views/view.c index 125f5c3..2f28c1f 100644 --- a/views/view.c +++ b/views/view.c @@ -183,6 +183,11 @@ void cView::DrawViewElement(eViewElement ve, map *stringTokens, } void cView::ClearViewElement(eViewElement ve) { + cViewElement *detachedVE = GetViewElement(ve); + if (detachedVE) { + detachedVE->Clear(); + return; + } cTemplateViewElement *viewElement = NULL; int currentAnimCat = ve; if (tmplViewElement) { @@ -1103,6 +1108,10 @@ bool cViewElement::Render(void) { return true; } +void cViewElement::Clear(void) { + ClearViewElement(ve); +} + void cViewElement::Action(void) { DoSleep(delay); if (!Running()) diff --git a/views/view.h b/views/view.h index 7b85a6c..91af9ec 100644 --- a/views/view.h +++ b/views/view.h @@ -95,6 +95,7 @@ public: virtual ~cViewElement(); void SetCallback(eViewElement ve, bool (cViewHelpers::*SetTokens)(bool, stringmap&, intmap&)) { this->ve = ve; this->SetTokens = SetTokens; }; virtual bool Render(void); + void Clear(void); bool Starting(void) { return Running(); }; };