fix undo log bugs by ensuring deck not touched after close

This commit is contained in:
Damien Elmes 2009-01-05 03:22:37 +09:00
parent bb5ff4eb7c
commit 104b4ecbba
2 changed files with 9 additions and 1 deletions

View file

@ -11,6 +11,7 @@ import anki.sound
from ankiqt import ui from ankiqt import ui
import ankiqt import ankiqt
from ankiqt.ui.utils import mungeQA, saveGeom, restoreGeom from ankiqt.ui.utils import mungeQA, saveGeom, restoreGeom
from anki.hooks import addHook
class FactEditor(object): class FactEditor(object):
"""An editor for new/existing facts. """An editor for new/existing facts.
@ -31,6 +32,7 @@ class FactEditor(object):
self.onFactInvalid = None self.onFactInvalid = None
self.lastFocusedEdit = None self.lastFocusedEdit = None
self.changeTimer = None self.changeTimer = None
addHook("deckClosed", self.deckClosedHook)
def setFact(self, fact, noFocus=False, check=False): def setFact(self, fact, noFocus=False, check=False):
"Make FACT the current fact." "Make FACT the current fact."
@ -57,6 +59,9 @@ class FactEditor(object):
def initMedia(self): def initMedia(self):
os.chdir(self.deck.mediaDir(create=True)) os.chdir(self.deck.mediaDir(create=True))
def deckClosedHook(self):
self.fact = None
def setupFields(self): def setupFields(self):
# init for later # init for later
self.fields = {} self.fields = {}
@ -319,7 +324,7 @@ class FactEditor(object):
def onFocusLost(self, widget): def onFocusLost(self, widget):
if self.fact is None: if self.fact is None:
# editor closed # editor or deck closed
return return
self.saveFields() self.saveFields()
field = self.widgets[widget] field = self.widgets[widget]
@ -339,6 +344,8 @@ class FactEditor(object):
self.onChangeTimer) self.onChangeTimer)
def onChangeTimer(self): def onChangeTimer(self):
if not self.fact:
return
self.saveFields() self.saveFields()
self.checkValid() self.checkValid()
if self.onChange: if self.onChange:

View file

@ -672,6 +672,7 @@ Error was:\n%(f1)s\n...\n%(f2)s""") % {'f1': fmt1, 'f2': fmt2})
self.deck.rollback() self.deck.rollback()
self.deck.close() self.deck.close()
self.deck = None self.deck = None
runHook("deckClosed")
if not hideWelcome: if not hideWelcome:
self.moveToState("noDeck") self.moveToState("noDeck")
else: else: