From: ghost Date: Thu, 11 Jun 2009 16:04:56 +0000 (+0200) Subject: small fixes X-Git-Tag: 2.6.0~251 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/9a9ce66ffba8974b7db87bf8a181f35497945c89 small fixes --- diff --git a/lib/base/smartptr.h b/lib/base/smartptr.h index a2c6691f..be83528f 100644 --- a/lib/base/smartptr.h +++ b/lib/base/smartptr.h @@ -3,6 +3,7 @@ #include "object.h" #include +#include #include inline void ptrAssert(void *p) { if (!p) *(unsigned long*)0=0; } @@ -12,6 +13,18 @@ class ePtr { protected: T *ptr; + char m_ptrStr[sizeof(void*)*2+1]; + void updatePtrStr() + { + if (ptr) { + if (sizeof(void*) > 4) + sprintf(m_ptrStr, "%llx", (unsigned long long)ptr); + else + sprintf(m_ptrStr, "%lx", (unsigned long)ptr); + } + else + strcpy(m_ptrStr, "NIL"); + } public: T &operator*() { return *ptr; } ePtr(): ptr(0) @@ -21,12 +34,13 @@ public: { if (c) c->AddRef(); + updatePtrStr(); } - ePtr(const ePtr &c) + ePtr(const ePtr &c): ptr(c.ptr) { - ptr=c.ptr; if (ptr) ptr->AddRef(); + updatePtrStr(); } ePtr &operator=(T *c) { @@ -35,9 +49,9 @@ public: if (ptr) ptr->Release(); ptr=c; + updatePtrStr(); return *this; } - ePtr &operator=(ePtr &c) { if (c.ptr) @@ -45,15 +59,18 @@ public: if (ptr) ptr->Release(); ptr=c.ptr; + updatePtrStr(); return *this; } - ~ePtr() { if (ptr) ptr->Release(); } - + char *getPtrString() + { + return m_ptrStr; + } #ifndef SWIG T* grabRef() { if (!ptr) return 0; ptr->AddRef(); return ptr; } T* &ptrref() { ASSERT(!ptr); return ptr; } @@ -106,7 +123,6 @@ public: ptr=c; return *this; } - eUsePtr &operator=(eUsePtr &c) { if (c.ptr) @@ -122,7 +138,6 @@ public: ptr=c.ptr; return *this; } - ~eUsePtr() { if (ptr) @@ -131,7 +146,6 @@ public: ptr->Release(); } } - #ifndef SWIG T* grabRef() { if (!ptr) return 0; ptr->AddRef(); ptr->AddUse(); return ptr; } T* &ptrref() { ASSERT(!ptr); return ptr; } @@ -168,24 +182,18 @@ public: eMutablePtr(): ePtr(0) { } - eMutablePtr(T *c): ePtr(c) { } - eMutablePtr(const eMutablePtr &c): ePtr(c) { } - eMutablePtr &operator=(T *c) { ePtr::operator=(c); return *this; } - - ePtrHelper operator->() { ptrAssert(ptr); return ePtrHelper(ptr); } - /* for const objects, we don't need the helper, as they can't */ /* be changed outside the program flow. at least this is */ /* what the compiler assumes, so in case you're using const */ diff --git a/lib/python/Components/ServiceEventTracker.py b/lib/python/Components/ServiceEventTracker.py index 164f6888..ee4bf381 100644 --- a/lib/python/Components/ServiceEventTracker.py +++ b/lib/python/Components/ServiceEventTracker.py @@ -14,7 +14,7 @@ class ServiceEventTracker: """Tracks service events into a screen""" InfoBarStack = [ ] InfoBarStackSize = 0 - oldService = None + oldServiceStr = None EventMap = { } navcore = None @@ -25,10 +25,9 @@ class ServiceEventTracker: if func_list: nav = set.navcore cur_ref = nav.getCurrentlyPlayingServiceReference() - old_service_running = set.oldRef and cur_ref and cur_ref == set.oldRef and set.oldService and set.oldService == str(nav.getCurrentService()) -# print "old_service_running", old_service_running - if not old_service_running and set.oldService: - set.oldService = None + old_service_running = set.oldRef and cur_ref and cur_ref == set.oldRef and set.oldServiceStr == nav.getCurrentService().getPtrString() + if not old_service_running and set.oldServiceStr: + set.oldServiceStr = None set.oldRef = None ssize = set.InfoBarStackSize stack = set.InfoBarStack @@ -37,14 +36,12 @@ class ServiceEventTracker: (not old_service_running and stack[ssize-1] == func[1]) or # let pass events from currently running service just to current active screen (derived from InfoBarBase) (old_service_running and ssize > 1 and stack[ssize-2] == func[1])): # let pass events from old running service just to previous active screen (derived from InfoBarBase) func[2]() -# else: -# print "ignore event", ev, "for inactive infobar '" + str(self.screen) + "'" @staticmethod def setActiveInfoBar(infobar, old_service, old_ref): set = ServiceEventTracker set.oldRef = old_ref - set.oldService = old_service and str(old_service) + set.oldServiceStr = old_service and old_service.getPtrString() assert infobar not in set.InfoBarStack, "FATAL: Infobar '" + str(infobar) + "' is already active!" set.InfoBarStack.append(infobar) set.InfoBarStackSize += 1 @@ -55,8 +52,12 @@ class ServiceEventTracker: set = ServiceEventTracker stack = set.InfoBarStack if set.InfoBarStackSize: + nav = set.navcore set.InfoBarStackSize -= 1 del stack[set.InfoBarStackSize] + old_service = nav.getCurrentService() + set.oldServiceStr = old_service and old_service.getPtrString() + set.oldRef = nav.getCurrentlyPlayingServiceReference() # if set.InfoBarStackSize: # print "ServiceEventTracker reset active '" + str(stack[set.InfoBarStackSize-1]) + "'"