Change how dialogs are deleted
This commit is contained in:
@@ -125,7 +125,7 @@ class GuiAbout(NDialog):
|
|||||||
def closeEvent(self, event: QCloseEvent) -> None:
|
def closeEvent(self, event: QCloseEvent) -> None:
|
||||||
"""Capture the close event and perform cleanup."""
|
"""Capture the close event and perform cleanup."""
|
||||||
event.accept()
|
event.accept()
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ class GuiDocMerge(NDialog):
|
|||||||
cls.exec()
|
cls.exec()
|
||||||
data = cls.data()
|
data = cls.data()
|
||||||
accepted = cls.result() == QtAccepted
|
accepted = cls.result() == QtAccepted
|
||||||
cls.deleteLater()
|
cls.softDelete()
|
||||||
return data, accepted
|
return data, accepted
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ class GuiDocSplit(NDialog):
|
|||||||
cls.exec()
|
cls.exec()
|
||||||
data, text = cls.data()
|
data, text = cls.data()
|
||||||
accepted = cls.result() == QtAccepted
|
accepted = cls.result() == QtAccepted
|
||||||
cls.deleteLater()
|
cls.softDelete()
|
||||||
return data, text, accepted
|
return data, text, accepted
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -90,5 +90,5 @@ class GuiEditLabel(NDialog):
|
|||||||
cls.exec()
|
cls.exec()
|
||||||
label = cls.itemLabel
|
label = cls.itemLabel
|
||||||
accepted = cls.result() == QtAccepted
|
accepted = cls.result() == QtAccepted
|
||||||
cls.deleteLater()
|
cls.softDelete()
|
||||||
return label, accepted
|
return label, accepted
|
||||||
|
|||||||
@@ -771,7 +771,7 @@ class GuiPreferences(NDialog):
|
|||||||
event.accept()
|
event.accept()
|
||||||
QApplication.processEvents()
|
QApplication.processEvents()
|
||||||
self.done(nwConst.DLG_FINISHED)
|
self.done(nwConst.DLG_FINISHED)
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ class GuiProjectSettings(NDialog):
|
|||||||
"""Capture the user closing the window and save settings."""
|
"""Capture the user closing the window and save settings."""
|
||||||
self._saveSettings()
|
self._saveSettings()
|
||||||
event.accept()
|
event.accept()
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ class GuiQuoteSelect(NDialog):
|
|||||||
cls.exec()
|
cls.exec()
|
||||||
quote = cls._selected
|
quote = cls._selected
|
||||||
accepted = cls.result() == QtAccepted
|
accepted = cls.result() == QtAccepted
|
||||||
cls.deleteLater()
|
cls.softDelete()
|
||||||
return quote, accepted
|
return quote, accepted
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ class GuiWordList(NDialog):
|
|||||||
"""Capture the close event and perform cleanup."""
|
"""Capture the close event and perform cleanup."""
|
||||||
self._saveGuiSettings()
|
self._saveGuiSettings()
|
||||||
event.accept()
|
event.accept()
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -45,6 +45,15 @@ if TYPE_CHECKING: # pragma: no cover
|
|||||||
|
|
||||||
class NDialog(QDialog):
|
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:
|
def keyPressEvent(self, event: QKeyEvent) -> None:
|
||||||
"""Overload keyPressEvent and forward escape to close."""
|
"""Overload keyPressEvent and forward escape to close."""
|
||||||
if event.matches(QKeySequence.StandardKey.Cancel):
|
if event.matches(QKeySequence.StandardKey.Cancel):
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ class GuiDictionaries(NNonBlockingDialog):
|
|||||||
def closeEvent(self, event: QCloseEvent) -> None:
|
def closeEvent(self, event: QCloseEvent) -> None:
|
||||||
"""Capture the user closing the window."""
|
"""Capture the user closing the window."""
|
||||||
event.accept()
|
event.accept()
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ class GuiLipsum(NDialog):
|
|||||||
cls = GuiLipsum(parent)
|
cls = GuiLipsum(parent)
|
||||||
cls.exec()
|
cls.exec()
|
||||||
text = cls.lipsumText
|
text = cls.lipsumText
|
||||||
cls.deleteLater()
|
cls.softDelete()
|
||||||
return text
|
return text
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ class GuiManuscriptBuild(NDialog):
|
|||||||
"""
|
"""
|
||||||
self._saveSettings()
|
self._saveSettings()
|
||||||
event.accept()
|
event.accept()
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ class GuiManuscript(NToolDialog):
|
|||||||
if isinstance(obj, GuiBuildSettings) and obj.isVisible():
|
if isinstance(obj, GuiBuildSettings) and obj.isVisible():
|
||||||
obj.close()
|
obj.close()
|
||||||
event.accept()
|
event.accept()
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ class GuiBuildSettings(NToolDialog):
|
|||||||
self._askToSaveBuild()
|
self._askToSaveBuild()
|
||||||
self._saveSettings()
|
self._saveSettings()
|
||||||
event.accept()
|
event.accept()
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ class GuiNovelDetails(NNonBlockingDialog):
|
|||||||
"""Capture the user closing the window and save settings."""
|
"""Capture the user closing the window and save settings."""
|
||||||
self._saveSettings()
|
self._saveSettings()
|
||||||
event.accept()
|
event.accept()
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ class GuiWelcome(NDialog):
|
|||||||
"""Capture the user closing the window and save settings."""
|
"""Capture the user closing the window and save settings."""
|
||||||
self._saveSettings()
|
self._saveSettings()
|
||||||
event.accept()
|
event.accept()
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -318,7 +318,7 @@ class GuiWritingStats(NToolDialog):
|
|||||||
def closeEvent(self, event: QCloseEvent) -> None:
|
def closeEvent(self, event: QCloseEvent) -> None:
|
||||||
"""Capture the user closing the window."""
|
"""Capture the user closing the window."""
|
||||||
event.accept()
|
event.accept()
|
||||||
self.deleteLater()
|
self.softDelete()
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -529,7 +529,7 @@ def testGuiProjTree_MergeDocuments(qtbot, monkeypatch, nwGUI, projPath, mockRnd,
|
|||||||
|
|
||||||
monkeypatch.setattr(GuiDocMerge, "__init__", lambda *a: None)
|
monkeypatch.setattr(GuiDocMerge, "__init__", lambda *a: None)
|
||||||
monkeypatch.setattr(GuiDocMerge, "exec", 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, "result", lambda *a: QtAccepted)
|
||||||
monkeypatch.setattr(GuiDocMerge, "data", lambda *a: mergeData)
|
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, "__init__", lambda *a: None)
|
||||||
monkeypatch.setattr(GuiDocSplit, "exec", 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, "result", lambda *a: QtAccepted)
|
||||||
monkeypatch.setattr(GuiDocSplit, "data", lambda *a: (splitData, splitText))
|
monkeypatch.setattr(GuiDocSplit, "data", lambda *a: (splitData, splitText))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user