# HG changeset patch # User Simon Cross # Date 1259439687 0 # Node ID 2921169e545b0d9afba735f7492728801f5383d7 # Parent be47830a56b1d41d846f1abf1b0d9f039d63d1d1 Don't rely on connect listener call order (PGU stores listeners in a dict). diff -r be47830a56b1 -r 2921169e545b gamelib/gameboard.py --- 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) diff -r be47830a56b1 -r 2921169e545b gamelib/savegame.py --- 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."""