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