diff --git a/novelwriter/extensions/modified.py b/novelwriter/extensions/modified.py index 8f185b24..450647ac 100644 --- a/novelwriter/extensions/modified.py +++ b/novelwriter/extensions/modified.py @@ -28,6 +28,7 @@ along with this program. If not, see . from __future__ import annotations from enum import Enum +from typing import TYPE_CHECKING from PyQt5.QtCore import QSize, Qt from PyQt5.QtGui import QWheelEvent @@ -38,10 +39,13 @@ from PyQt5.QtWidgets import ( from novelwriter import CONFIG, SHARED +if TYPE_CHECKING: # pragma: no cover + from novelwriter.guimain import GuiMain + class NToolDialog(QDialog): - def __init__(self, parent: QWidget | None = None) -> None: + def __init__(self, parent: GuiMain) -> None: super().__init__(parent=parent) self.setModal(False) if CONFIG.osDarwin: diff --git a/novelwriter/shared.py b/novelwriter/shared.py index be323386..dced61a6 100644 --- a/novelwriter/shared.py +++ b/novelwriter/shared.py @@ -198,7 +198,7 @@ class SharedData(QObject): def closeProject(self) -> None: """Close the current project.""" - self._closeDialogs() + self._closeToolDialogs() self.project.closeProject(self._idleTime) self._resetProject() self._resetIdleTimer() @@ -357,15 +357,12 @@ class SharedData(QObject): self._idleTime = 0.0 return - def _closeDialogs(self) -> None: - """Close non-modal dialogs.""" - from novelwriter.tools.manuscript import GuiManuscript - from novelwriter.tools.writingstats import GuiWritingStats - + def _closeToolDialogs(self) -> None: + """Close all open tool dialogs.""" + from novelwriter.extensions.modified import NToolDialog for widget in self.mainGui.children(): - if isinstance(widget, (GuiManuscript, GuiWritingStats)): + if isinstance(widget, NToolDialog): widget.close() - return # END Class SharedData diff --git a/novelwriter/tools/manuscript.py b/novelwriter/tools/manuscript.py index 58c4ec53..15ff0d30 100644 --- a/novelwriter/tools/manuscript.py +++ b/novelwriter/tools/manuscript.py @@ -28,6 +28,7 @@ import logging from datetime import datetime from time import time +from typing import TYPE_CHECKING from PyQt5.QtCore import Qt, QTimer, QUrl, pyqtSignal, pyqtSlot from PyQt5.QtGui import QCloseEvent, QColor, QCursor, QFont, QPalette, QResizeEvent @@ -56,6 +57,9 @@ from novelwriter.types import ( QtSizeExpanding, QtSizeIgnored, QtUserRole ) +if TYPE_CHECKING: # pragma: no cover + from novelwriter.guimain import GuiMain + logger = logging.getLogger(__name__) @@ -69,7 +73,7 @@ class GuiManuscript(NToolDialog): D_KEY = QtUserRole - def __init__(self, parent: QWidget) -> None: + def __init__(self, parent: GuiMain) -> None: super().__init__(parent=parent) logger.debug("Create: GuiManuscript") diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index e138b592..77b8035a 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -25,6 +25,8 @@ from __future__ import annotations import logging +from typing import TYPE_CHECKING + from PyQt5.QtCore import QEvent, pyqtSignal, pyqtSlot from PyQt5.QtGui import QFont, QIcon, QSyntaxHighlighter, QTextCharFormat, QTextDocument from PyQt5.QtWidgets import ( @@ -51,6 +53,9 @@ from novelwriter.types import ( QtRoleApply, QtRoleReject, QtUserRole ) +if TYPE_CHECKING: # pragma: no cover + from novelwriter.guimain import GuiMain + logger = logging.getLogger(__name__) @@ -69,7 +74,7 @@ class GuiBuildSettings(NToolDialog): newSettingsReady = pyqtSignal(BuildSettings) - def __init__(self, parent: QWidget, build: BuildSettings) -> None: + def __init__(self, parent: GuiMain, build: BuildSettings) -> None: super().__init__(parent=parent) logger.debug("Create: GuiBuildSettings")