aboutsummaryrefslogtreecommitdiff
path: root/lib/python
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2008-02-13 22:23:29 +0000
committerFelix Domke <tmbinc@elitedvb.net>2008-02-13 22:23:29 +0000
commit194615a88fac0c4259b3c2217c8e13372b7c3b86 (patch)
treed3ed38612b97b375d4d6b089148ab43267685a4d /lib/python
parent829ad562bb09e7e396320cd902263ec8b73f89dd (diff)
downloadenigma2-194615a88fac0c4259b3c2217c8e13372b7c3b86.tar.gz
enigma2-194615a88fac0c4259b3c2217c8e13372b7c3b86.zip
implement proper 'destroy' functions in Converter
Diffstat (limited to 'lib/python')
-rw-r--r--lib/python/Components/Converter/ConditionalShowHide.py6
-rw-r--r--lib/python/Components/Converter/Poll.py2
-rw-r--r--lib/python/Components/Element.py9
-rw-r--r--lib/python/Components/Sources/Boolean.py6
-rw-r--r--lib/python/Components/Sources/Clock.py3
-rw-r--r--lib/python/Components/Sources/FrontendStatus.py3
-rw-r--r--lib/python/Screens/Screen.py11
7 files changed, 31 insertions, 9 deletions
diff --git a/lib/python/Components/Converter/ConditionalShowHide.py b/lib/python/Components/Converter/ConditionalShowHide.py
index d2e89ba4..50e8b1a8 100644
--- a/lib/python/Components/Converter/ConditionalShowHide.py
+++ b/lib/python/Components/Converter/ConditionalShowHide.py
@@ -11,6 +11,8 @@ class ConditionalShowHide(Converter, object):
self.blinktime = 500
self.timer = eTimer()
self.timer.timeout.get().append(self.blinkFunc)
+ else:
+ self.timer = None
def blinkFunc(self):
if self.blinking == True:
@@ -56,3 +58,7 @@ class ConditionalShowHide(Converter, object):
self.stopBlinking()
else:
downstream.visible = self.calcVisibility()
+
+ def destroy(self):
+ if self.timer:
+ self.timer.timeout.get().remove(self.blinkFunc)
diff --git a/lib/python/Components/Converter/Poll.py b/lib/python/Components/Converter/Poll.py
index 060c12ea..f41765d4 100644
--- a/lib/python/Components/Converter/Poll.py
+++ b/lib/python/Components/Converter/Poll.py
@@ -29,3 +29,5 @@ class Poll(object):
if not suspended:
self.poll()
+ def destroy(self):
+ self.__poll_timer.timeout.get().remove(self.poll)
diff --git a/lib/python/Components/Element.py b/lib/python/Components/Element.py
index baab4cfb..437d934b 100644
--- a/lib/python/Components/Element.py
+++ b/lib/python/Components/Element.py
@@ -48,11 +48,13 @@ class Element(object):
# we should not disconnect from upstream if
# there are still elements depending on us.
assert len(self.downstream_elements) == 0, "there are still downstream elements left"
-
+
# Sources don't have a source themselves. don't do anything here.
if self.source is not None:
self.source.disconnectDownstream(self)
-
+ # sources are owned by the Screen, so don't destroy them here.
+ self.destroy()
+
def disconnectDownstream(self, downstream):
self.downstream_elements.remove(downstream)
if self.master == downstream:
@@ -89,3 +91,6 @@ class Element(object):
def doSuspend(self, suspend):
pass
+
+ def destroy(self):
+ pass
diff --git a/lib/python/Components/Sources/Boolean.py b/lib/python/Components/Sources/Boolean.py
index df7f81b2..21c2c2b9 100644
--- a/lib/python/Components/Sources/Boolean.py
+++ b/lib/python/Components/Sources/Boolean.py
@@ -18,6 +18,8 @@ class Boolean(Source, object):
self.poll_timer = eTimer()
self.poll_timer.timeout.get().append(self.poll)
self.poll_timer.start(poll)
+ else:
+ self.poll_timer = None
@cached
def getBoolean(self):
@@ -30,3 +32,7 @@ class Boolean(Source, object):
def poll(self):
self.changed((self.CHANGED_ALL,))
+
+ def destroy(self):
+ if self.poll_timer:
+ self.poll_timer.timeout.get().remove(self.poll)
diff --git a/lib/python/Components/Sources/Clock.py b/lib/python/Components/Sources/Clock.py
index 8341ebec..b59a20d5 100644
--- a/lib/python/Components/Sources/Clock.py
+++ b/lib/python/Components/Sources/Clock.py
@@ -26,3 +26,6 @@ class Clock(Source):
else:
self.clock_timer.start(1000)
self.poll()
+
+ def destroy(self):
+ self.clock_timer.timeout.get().remove(self.poll)
diff --git a/lib/python/Components/Sources/FrontendStatus.py b/lib/python/Components/Sources/FrontendStatus.py
index 5e096186..4d38f754 100644
--- a/lib/python/Components/Sources/FrontendStatus.py
+++ b/lib/python/Components/Sources/FrontendStatus.py
@@ -47,3 +47,6 @@ class FrontendStatus(Source):
else:
self.poll_timer.start(self.update_interval)
+ def destroy(self):
+ self.poll_timer.timeout.get().remove(self.updateFrontendStatus)
+
diff --git a/lib/python/Screens/Screen.py b/lib/python/Screens/Screen.py
index 4c4f117b..508309db 100644
--- a/lib/python/Screens/Screen.py
+++ b/lib/python/Screens/Screen.py
@@ -98,18 +98,15 @@ class Screen(dict, GUISkin):
# but currently we destroy the screen afterwards
# anyway.
for val in self.renderer:
- val.disconnectAll() # disconnected converter/sources and probably destroy them
-
+ val.disconnectAll() # disconnected converter/sources and probably destroy them. Sources will not be destroyed.
+
del self.session
for (name, val) in self.items():
val.destroy()
del self[name]
-
- for val in self.renderer:
- val.destroy()
-
+
self.renderer = [ ]
-
+
# really delete all elements now
self.__dict__.clear()