mirror of
https://github.com/ankitects/anki.git
synced 2025-09-20 15:02:21 -04:00
close(not hide) deck windows before deck close, remove stale hooks
This commit is contained in:
parent
a48f0fd649
commit
a601268d4c
5 changed files with 26 additions and 13 deletions
|
@ -55,7 +55,8 @@ class DialogManager(object):
|
|||
def closeAll(self):
|
||||
for (n, (klass, obj)) in self.modelessDialogs.items():
|
||||
if obj:
|
||||
obj.hide()
|
||||
obj.forceClose = True
|
||||
obj.close()
|
||||
self.close(n)
|
||||
|
||||
# since we load the graphs dynamically, we need a proxy for this
|
||||
|
|
|
@ -27,6 +27,7 @@ class AddCards(QDialog):
|
|||
self.setupStatus()
|
||||
self.modelChanged(self.parent.deck.currentModel)
|
||||
self.addedItems = 0
|
||||
self.forceClose = False
|
||||
restoreGeom(self, "add")
|
||||
restoreSplitter(self.dialog.splitter, "add")
|
||||
self.show()
|
||||
|
@ -152,9 +153,10 @@ question or answer on all cards."""), parent=self)
|
|||
def onClose(self):
|
||||
# stop anything playing
|
||||
clearAudioQueue()
|
||||
if (self.editor.fieldsAreBlank() or
|
||||
if (self.forceClose or self.editor.fieldsAreBlank() or
|
||||
ui.utils.askUser(_("Close and lose current input?"),
|
||||
self)):
|
||||
self.editor.close()
|
||||
ui.dialogs.close("AddCards")
|
||||
self.parent.deck.s.flush()
|
||||
self.parent.deck.rebuildCSS()
|
||||
|
|
|
@ -18,7 +18,7 @@ from ankiqt.ui.utils import saveHeader, restoreHeader
|
|||
from anki.errors import *
|
||||
from anki.db import *
|
||||
from anki.stats import CardStats
|
||||
from anki.hooks import runHook, addHook
|
||||
from anki.hooks import runHook, addHook, removeHook
|
||||
|
||||
CARD_ID = 0
|
||||
CARD_QUESTION = 1
|
||||
|
@ -284,6 +284,7 @@ class EditDeck(QMainWindow):
|
|||
self.parent = parent
|
||||
self.deck = self.parent.deck
|
||||
self.config = parent.config
|
||||
self.forceClose = False
|
||||
self.origModTime = parent.deck.modified
|
||||
self.currentRow = None
|
||||
self.dialog = ankiqt.forms.cardlist.Ui_MainWindow()
|
||||
|
@ -552,17 +553,20 @@ class EditDeck(QMainWindow):
|
|||
def onClose(self):
|
||||
saveSplitter(self.dialog.splitter, "editor")
|
||||
self.editor.saveFieldsNow()
|
||||
if not self.factValid:
|
||||
ui.utils.showInfo(_(
|
||||
"Some fields are missing or not unique."),
|
||||
parent=self, help="AddItems#AddError")
|
||||
return
|
||||
if not self.forceClose:
|
||||
if not self.factValid:
|
||||
ui.utils.showInfo(_(
|
||||
"Some fields are missing or not unique."),
|
||||
parent=self, help="AddItems#AddError")
|
||||
return
|
||||
self.editor.setFact(None)
|
||||
self.editor.close()
|
||||
saveGeom(self, "editor")
|
||||
saveHeader(self.dialog.tableView.horizontalHeader(), "editor")
|
||||
self.hide()
|
||||
ui.dialogs.close("CardList")
|
||||
self.parent.moveToState("auto")
|
||||
self.teardownUndo()
|
||||
return True
|
||||
|
||||
def closeEvent(self, evt):
|
||||
|
@ -807,6 +811,9 @@ where id in %s""" % ids2str(sf))
|
|||
def setupUndo(self):
|
||||
addHook("postUndoRedo", self.postUndoRedo)
|
||||
|
||||
def teardownUndo(self):
|
||||
removeHook("postUndoRedo", self.postUndoRedo)
|
||||
|
||||
def postUndoRedo(self):
|
||||
self.updateFilterLabel()
|
||||
self.updateSearch()
|
||||
|
|
|
@ -13,7 +13,7 @@ import anki.sound
|
|||
from ankiqt import ui
|
||||
import ankiqt
|
||||
from ankiqt.ui.utils import mungeQA, saveGeom, restoreGeom
|
||||
from anki.hooks import addHook
|
||||
from anki.hooks import addHook, removeHook
|
||||
from sqlalchemy.exceptions import InvalidRequestError
|
||||
|
||||
clozeColour = "#0000ff"
|
||||
|
@ -41,6 +41,10 @@ class FactEditor(object):
|
|||
addHook("deckClosed", self.deckClosedHook)
|
||||
addHook("guiReset", self.refresh)
|
||||
|
||||
def close(self):
|
||||
removeHook("deckClosed", self.deckClosedHook)
|
||||
removeHook("guiReset", self.refresh)
|
||||
|
||||
def setFact(self, fact, noFocus=False, check=False):
|
||||
"Make FACT the current fact."
|
||||
self.fact = fact
|
||||
|
|
|
@ -690,6 +690,7 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
|
|||
def saveAndClose(self, hideWelcome=False):
|
||||
"(Auto)save and close. Prompt if necessary. True if okay to proceed."
|
||||
self.hideWelcome = hideWelcome
|
||||
self.closeAllDeckWindows()
|
||||
if self.deck is not None:
|
||||
if self.deck.reviewEarly:
|
||||
self.deck.resetAfterReviewEarly()
|
||||
|
@ -725,8 +726,6 @@ To upgrade an old deck, download Anki 0.9.8.7."""))
|
|||
self.deck = None
|
||||
if not hideWelcome:
|
||||
self.moveToState("noDeck")
|
||||
else:
|
||||
self.closeAllDeckWindows()
|
||||
return True
|
||||
|
||||
def inMainWindow(self):
|
||||
|
@ -1586,6 +1585,8 @@ it to your friends.
|
|||
if self.deck is None and self.deckPath is None:
|
||||
# qt on linux incorrectly accepts shortcuts for disabled actions
|
||||
return
|
||||
# hide all deck-associated dialogs
|
||||
self.closeAllDeckWindows()
|
||||
if self.deck:
|
||||
# save first, so we can rollback on failure
|
||||
self.deck.save()
|
||||
|
@ -1603,8 +1604,6 @@ it to your friends.
|
|||
self.deck.close()
|
||||
self.deck = None
|
||||
self.loadAfterSync = reload
|
||||
# hide all deck-associated dialogs
|
||||
self.closeAllDeckWindows()
|
||||
# bug triggered by preferences dialog - underlying c++ widgets are not
|
||||
# garbage collected until the middle of the child thread
|
||||
import gc; gc.collect()
|
||||
|
|
Loading…
Reference in a new issue