changeset 571:2921169e545b

Don't rely on connect listener call order (PGU stores listeners in a dict).
author Simon Cross <hodgestar@gmail.com>
date Sat, 28 Nov 2009 20:21:27 +0000
parents be47830a56b1
children 40eee9e1246c
files gamelib/gameboard.py gamelib/savegame.py
diffstat 2 files changed, 12 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/gameboard.py	Sat Nov 28 20:00:42 2009 +0000
+++ b/gamelib/gameboard.py	Sat Nov 28 20:21:27 2009 +0000
@@ -865,16 +865,13 @@
 
     def _do_quit(self):
 
-        def check_saved(_widget):
-            if _widget.value:
-                # OK to quit, rely on pgu ordering that this happens in
-                # the right order
+        def saved(val):
+            if val:
                 pygame.event.post(constants.GO_GAME_OVER)
 
         def sure(val):
             if val == 2:
-                savedialog = savegame.SaveDialog(self)
-                savedialog.connect(gui.CHANGE, check_saved)
+                savedialog = savegame.SaveDialog(self, saved)
                 savedialog.open()
             elif val:
                 pygame.event.post(constants.GO_GAME_OVER)
--- a/gamelib/savegame.py	Sat Nov 28 20:00:42 2009 +0000
+++ b/gamelib/savegame.py	Sat Nov 28 20:21:27 2009 +0000
@@ -217,13 +217,18 @@
 class SaveDialog(BaseSaveRestoreDialog):
     """Save game dialog."""
 
-    def __init__(self, gameboard):
+    def __init__(self, gameboard, saved_func=None):
         BaseSaveRestoreDialog.__init__(self, "Save Game ...", "Save", allow_new=True)
+        if saved_func is None:
+            self._saved_func = lambda _val: None
+        else:
+            self._saved_func = saved_func
         self.connect(gui.CHANGE, self._save, gameboard)
 
     def _save(self, gameboard):
         filename = self.get_fullpath()
         if filename is None:
+            self._saved_func(False)
             return
 
         data = gameboard.save_game()
@@ -234,9 +239,11 @@
         try:
             write_savegame(filename, data, snapshot, level_name, timestamp)
         except Exception, e:
+            self._saved_func(False)
             print "Failed to save game: %s" % (e,)
-            self.value = None
+            return
 
+        self._saved_func(True)
 
 class RestoreDialog(BaseSaveRestoreDialog):
     """Restore game dialog."""