Change how dialogs are deleted
This commit is contained in:
@@ -125,7 +125,7 @@ class GuiAbout(NDialog):
|
||||
def closeEvent(self, event: QCloseEvent) -> None:
|
||||
"""Capture the close event and perform cleanup."""
|
||||
event.accept()
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -137,7 +137,7 @@ class GuiDocMerge(NDialog):
|
||||
cls.exec()
|
||||
data = cls.data()
|
||||
accepted = cls.result() == QtAccepted
|
||||
cls.deleteLater()
|
||||
cls.softDelete()
|
||||
return data, accepted
|
||||
|
||||
##
|
||||
|
||||
@@ -185,7 +185,7 @@ class GuiDocSplit(NDialog):
|
||||
cls.exec()
|
||||
data, text = cls.data()
|
||||
accepted = cls.result() == QtAccepted
|
||||
cls.deleteLater()
|
||||
cls.softDelete()
|
||||
return data, text, accepted
|
||||
|
||||
##
|
||||
|
||||
@@ -90,5 +90,5 @@ class GuiEditLabel(NDialog):
|
||||
cls.exec()
|
||||
label = cls.itemLabel
|
||||
accepted = cls.result() == QtAccepted
|
||||
cls.deleteLater()
|
||||
cls.softDelete()
|
||||
return label, accepted
|
||||
|
||||
@@ -771,7 +771,7 @@ class GuiPreferences(NDialog):
|
||||
event.accept()
|
||||
QApplication.processEvents()
|
||||
self.done(nwConst.DLG_FINISHED)
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -147,7 +147,7 @@ class GuiProjectSettings(NDialog):
|
||||
"""Capture the user closing the window and save settings."""
|
||||
self._saveSettings()
|
||||
event.accept()
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -131,7 +131,7 @@ class GuiQuoteSelect(NDialog):
|
||||
cls.exec()
|
||||
quote = cls._selected
|
||||
accepted = cls.result() == QtAccepted
|
||||
cls.deleteLater()
|
||||
cls.softDelete()
|
||||
return quote, accepted
|
||||
|
||||
##
|
||||
|
||||
@@ -140,7 +140,7 @@ class GuiWordList(NDialog):
|
||||
"""Capture the close event and perform cleanup."""
|
||||
self._saveGuiSettings()
|
||||
event.accept()
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -45,6 +45,15 @@ if TYPE_CHECKING: # pragma: no cover
|
||||
|
||||
class NDialog(QDialog):
|
||||
|
||||
def softDelete(self) -> None:
|
||||
"""Since calling deleteLater is sometimes not safe from Python,
|
||||
as the C++ object can be deleted before the Python process is
|
||||
done with the object, we instead set the dialog's parent to None
|
||||
so that it gets garbage collected when it runs out of scope.
|
||||
"""
|
||||
self.setParent(None) # type: ignore
|
||||
return
|
||||
|
||||
def keyPressEvent(self, event: QKeyEvent) -> None:
|
||||
"""Overload keyPressEvent and forward escape to close."""
|
||||
if event.matches(QKeySequence.StandardKey.Cancel):
|
||||
|
||||
@@ -172,7 +172,7 @@ class GuiDictionaries(NNonBlockingDialog):
|
||||
def closeEvent(self, event: QCloseEvent) -> None:
|
||||
"""Capture the user closing the window."""
|
||||
event.accept()
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -133,7 +133,7 @@ class GuiLipsum(NDialog):
|
||||
cls = GuiLipsum(parent)
|
||||
cls.exec()
|
||||
text = cls.lipsumText
|
||||
cls.deleteLater()
|
||||
cls.softDelete()
|
||||
return text
|
||||
|
||||
##
|
||||
|
||||
@@ -250,7 +250,7 @@ class GuiManuscriptBuild(NDialog):
|
||||
"""
|
||||
self._saveSettings()
|
||||
event.accept()
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -265,7 +265,7 @@ class GuiManuscript(NToolDialog):
|
||||
if isinstance(obj, GuiBuildSettings) and obj.isVisible():
|
||||
obj.close()
|
||||
event.accept()
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -200,7 +200,7 @@ class GuiBuildSettings(NToolDialog):
|
||||
self._askToSaveBuild()
|
||||
self._saveSettings()
|
||||
event.accept()
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -150,7 +150,7 @@ class GuiNovelDetails(NNonBlockingDialog):
|
||||
"""Capture the user closing the window and save settings."""
|
||||
self._saveSettings()
|
||||
event.accept()
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -196,7 +196,7 @@ class GuiWelcome(NDialog):
|
||||
"""Capture the user closing the window and save settings."""
|
||||
self._saveSettings()
|
||||
event.accept()
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -318,7 +318,7 @@ class GuiWritingStats(NToolDialog):
|
||||
def closeEvent(self, event: QCloseEvent) -> None:
|
||||
"""Capture the user closing the window."""
|
||||
event.accept()
|
||||
self.deleteLater()
|
||||
self.softDelete()
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
@@ -529,7 +529,7 @@ def testGuiProjTree_MergeDocuments(qtbot, monkeypatch, nwGUI, projPath, mockRnd,
|
||||
|
||||
monkeypatch.setattr(GuiDocMerge, "__init__", lambda *a: None)
|
||||
monkeypatch.setattr(GuiDocMerge, "exec", lambda *a: None)
|
||||
monkeypatch.setattr(GuiDocMerge, "deleteLater", lambda *a: None)
|
||||
monkeypatch.setattr(GuiDocMerge, "softDelete", lambda *a: None)
|
||||
monkeypatch.setattr(GuiDocMerge, "result", lambda *a: QtAccepted)
|
||||
monkeypatch.setattr(GuiDocMerge, "data", lambda *a: mergeData)
|
||||
|
||||
@@ -629,7 +629,7 @@ def testGuiProjTree_SplitDocument(qtbot, monkeypatch, nwGUI, projPath, mockRnd,
|
||||
|
||||
monkeypatch.setattr(GuiDocSplit, "__init__", lambda *a: None)
|
||||
monkeypatch.setattr(GuiDocSplit, "exec", lambda *a: None)
|
||||
monkeypatch.setattr(GuiDocSplit, "deleteLater", lambda *a: None)
|
||||
monkeypatch.setattr(GuiDocSplit, "softDelete", lambda *a: None)
|
||||
monkeypatch.setattr(GuiDocSplit, "result", lambda *a: QtAccepted)
|
||||
monkeypatch.setattr(GuiDocSplit, "data", lambda *a: (splitData, splitText))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user