some cleanups,
[enigma2.git] / lib / python / Screens / Screen.py
index 92efb7053b7e209e7fc5c4b92af9174c7e5ae51b..287847baf93247c1ec01a8e355c47afb993d01e3 100644 (file)
@@ -1,9 +1,13 @@
-from Components.HTMLSkin import HTMLSkin
+from Tools.Profile import profile, profile_final
+
+profile("LOAD:GUISkin")
 from Components.GUISkin import GUISkin
+profile("LOAD:Source")
 from Components.Sources.Source import Source
+profile("LOAD:GUIComponent")
 from Components.GUIComponent import GUIComponent
 
-class Screen(dict, HTMLSkin, GUISkin):
+class Screen(dict, GUISkin):
 
        ALLOW_SUSPEND = False
 
@@ -37,8 +41,6 @@ class Screen(dict, HTMLSkin, GUISkin):
 
                self.close_on_next_exec = None
 
-               self.in_close = False
-
                # stand alone screens (for example web screens)
                # don't care about having or not having focus.
                self.stand_alone = False
@@ -73,10 +75,11 @@ class Screen(dict, HTMLSkin, GUISkin):
                                x()
        
        def execEnd(self):
+               active_components = self.active_components
 #              for (name, val) in self.items():
-               for val in self.active_components:
+               self.active_components = None
+               for val in active_components:
                        val.execEnd()
-               del self.active_components
 #              assert self.session != None, "execEnd on non-execing screen!"
 #              self.session = None
                self.execing = False
@@ -96,28 +99,23 @@ class Screen(dict, HTMLSkin, 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()
        
        def close(self, *retval):
-               if not self.in_close:
-                       if not self.execing:
-                               self.close_on_next_exec = retval
-                       else:
-                               self.in_close = True
-                               self.session.close(self, *retval)
+               if not self.execing:
+                       self.close_on_next_exec = retval
+               else:
+                       self.session.close(self, *retval)
 
        def setFocus(self, o):
                self.instance.setFocus(o.instance)