better (and more correct) fix
authorFelix Domke <tmbinc@elitedvb.net>
Tue, 24 Apr 2007 13:07:43 +0000 (13:07 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Tue, 24 Apr 2007 13:07:43 +0000 (13:07 +0000)
lib/python/Screens/Screen.py
mytest.py

index a6106e1..cfcb528 100644 (file)
@@ -22,7 +22,10 @@ class Screen(dict, HTMLSkin, GUISkin):
                self.onHide = [ ]
 
                self.execing = False
+               
                self.shown = True
+               # already shown is false until the screen is really shown (after creation)
+               self.already_shown = False
 
                self.renderer = [ ]
 
@@ -113,10 +116,11 @@ class Screen(dict, HTMLSkin, GUISkin):
        def setFocus(self, o):
                self.instance.setFocus(o.instance)
 
-       def show(self, force = False):
-               if (self.shown and not force) or not self.instance:
+       def show(self):
+               if (self.shown and self.already_shown) or not self.instance:
                        return
                self.shown = True
+               self.already_shown = True
                self.instance.show()
                for x in self.onShow:
                        x()
index 452dd3d..8d8036b 100644 (file)
--- a/mytest.py
+++ b/mytest.py
@@ -173,11 +173,7 @@ class Session:
 
                # when execBegin opened a new dialog, don't bother showing the old one.
                if c == self.current_dialog and do_show:
-                       # this is the first show() for each screen.
-                       # screen.shown is already true, because that resembles the state 
-                       # ("not-yet-shown-but-will-be-shown") best, so c.show() would just do nothing.
-                       # show(force=True) will show in any case.
-                       c.show(force = True)
+                       c.show()
 
        def execEnd(self, last=True):
                assert self.in_exec