diff --git a/aqt/__init__.py b/aqt/__init__.py index 002b87d6e..3db24c6ff 100644 --- a/aqt/__init__.py +++ b/aqt/__init__.py @@ -55,11 +55,15 @@ class DialogManager(object): self._dialogs[name] = [self._dialogs[name][0], None] def closeAll(self): + "True if all closed successfully." for (n, (creator, instance)) in self._dialogs.items(): if instance: + if not instance.canClose(): + return False instance.forceClose = True instance.close() self.close(n) + return True dialogs = DialogManager() diff --git a/aqt/browser.py b/aqt/browser.py index 508f2bdf5..f8bd41768 100644 --- a/aqt/browser.py +++ b/aqt/browser.py @@ -441,6 +441,9 @@ class Browser(QMainWindow): self.mw.maybeReset() evt.accept() + def canClose(self): + return True + def keyPressEvent(self, evt): "Show answer on RET or register answer." if evt.key() == Qt.Key_Escape: diff --git a/aqt/editcurrent.py b/aqt/editcurrent.py index 29e98f0fe..c029fc36e 100644 --- a/aqt/editcurrent.py +++ b/aqt/editcurrent.py @@ -64,3 +64,6 @@ class EditCurrent(QDialog): self.mw.moveToState("review") saveGeom(self, "editcurrent") aqt.dialogs.close("EditCurrent") + + def canClose(self): + return True diff --git a/aqt/main.py b/aqt/main.py index 7f2af17a1..40b4c7add 100644 --- a/aqt/main.py +++ b/aqt/main.py @@ -226,9 +226,10 @@ To import into a password protected profile, please open the profile before atte if not self.pm.profile: # already unloaded return - self.state = "profileManager" runHook("unloadProfile") - self.unloadCollection() + if not self.unloadCollection(): + return + self.state = "profileManager" self.onSync(auto=True, reload=False) self.pm.profile['mainWindowGeom'] = self.saveGeometry() self.pm.profile['mainWindowState'] = self.saveState() @@ -257,14 +258,17 @@ how to restore from a backup.""") self.moveToState("deckBrowser") def unloadCollection(self): + "True if unload successful." if self.col: - self.closeAllCollectionWindows() + if not self.closeAllCollectionWindows(): + return self.maybeOptimize() self.col.close() self.col = None self.progress.start(immediate=True) self.backup() self.progress.finish() + return True # Backup and auto-optimize ########################################################################## @@ -469,7 +473,7 @@ title="%s">%s''' % ( self.form.centralwidget.setLayout(self.mainLayout) def closeAllCollectionWindows(self): - aqt.dialogs.closeAll() + return aqt.dialogs.closeAll() # Components ########################################################################## @@ -521,7 +525,8 @@ title="%s">%s''' % ( if not auto or (self.pm.profile['syncKey'] and self.pm.profile['autoSync']): from aqt.sync import SyncManager - self.unloadCollection() + if not self.unloadCollection(): + return # set a sync state so the refresh timer doesn't fire while deck # unloaded self.state = "sync"