implement proper 'destroy' functions in Converter
authorFelix Domke <tmbinc@elitedvb.net>
Wed, 13 Feb 2008 22:23:29 +0000 (22:23 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Wed, 13 Feb 2008 22:23:29 +0000 (22:23 +0000)
lib/python/Components/Converter/ConditionalShowHide.py
lib/python/Components/Converter/Poll.py
lib/python/Components/Element.py
lib/python/Components/Sources/Boolean.py
lib/python/Components/Sources/Clock.py
lib/python/Components/Sources/FrontendStatus.py
lib/python/Screens/Screen.py

index d2e89ba44dabd270b8b64d91d49f6dacd3ce2fd1..50e8b1a8dee879f905e60354b1b96db0de071a1c 100644 (file)
@@ -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)
index 060c12ea68a654de49bcde002979352039a26eaf..f41765d487f6516a262910e94774dcc00ce97ae0 100644 (file)
@@ -29,3 +29,5 @@ class Poll(object):
                if not suspended:
                        self.poll()
 
+       def destroy(self):
+               self.__poll_timer.timeout.get().remove(self.poll)
index baab4cfb46d30284be8d3836d61e346e49a8b5bf..437d934bb507529969571bdeaa487c1503dc825e 100644 (file)
@@ -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
index df7f81b2a68e50bb1b510a02d795d477db0c82fc..21c2c2b976222f8b31f324b87c24bcd49b37cce4 100644 (file)
@@ -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)
index 8341ebecc9f734e526d2f14148755495ea0b3156..b59a20d5fbece643fcf92a159ce572a0009da94b 100644 (file)
@@ -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)
index 5e0961867ee44bb63b41cad998d0d7804b9a1afb..4d38f754c7e83da983c2642aa99b66b5b7478bc3 100644 (file)
@@ -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)
+
index 4c4f117bad39c213775077ac8d6c58a7863277fd..508309dbfa98a0a6966616083fd93140f1b2b453 100644 (file)
@@ -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()