From 5faeb12a745e695ec231b43c44309f9e8d5a4c4e Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Thu, 2 May 2024 21:02:23 +0200 Subject: [PATCH 1/2] Close non-modal dialogs when project closes --- novelwriter/shared.py | 20 ++++++++++++++++---- tests/test_tools/test_tools_manuscript.py | 12 +++++++----- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/novelwriter/shared.py b/novelwriter/shared.py index 25410871..be323386 100644 --- a/novelwriter/shared.py +++ b/novelwriter/shared.py @@ -26,21 +26,21 @@ from __future__ import annotations import logging +from pathlib import Path from time import time from typing import TYPE_CHECKING, TypeVar -from pathlib import Path from PyQt5.QtCore import QObject, QRunnable, QThreadPool, QTimer, pyqtSignal from PyQt5.QtWidgets import QFileDialog, QMessageBox, QWidget -from novelwriter.common import formatFileFilter +from novelwriter.common import formatFileFilter from novelwriter.constants import nwFiles from novelwriter.core.spellcheck import NWSpellEnchant if TYPE_CHECKING: # pragma: no cover - from novelwriter.guimain import GuiMain - from novelwriter.gui.theme import GuiTheme from novelwriter.core.project import NWProject + from novelwriter.gui.theme import GuiTheme + from novelwriter.guimain import GuiMain logger = logging.getLogger(__name__) @@ -198,6 +198,7 @@ class SharedData(QObject): def closeProject(self) -> None: """Close the current project.""" + self._closeDialogs() self.project.closeProject(self._idleTime) self._resetProject() self._resetIdleTimer() @@ -356,6 +357,17 @@ 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 + + for widget in self.mainGui.children(): + if isinstance(widget, (GuiManuscript, GuiWritingStats)): + widget.close() + + return + # END Class SharedData diff --git a/tests/test_tools/test_tools_manuscript.py b/tests/test_tools/test_tools_manuscript.py index b8856516..00b26b4b 100644 --- a/tests/test_tools/test_tools_manuscript.py +++ b/tests/test_tools/test_tools_manuscript.py @@ -20,18 +20,18 @@ along with this program. If not, see . """ from __future__ import annotations -import pytest import sys from pathlib import Path -from pytestqt.qtbot import QtBot + +import pytest from mocked import causeOSError -from tools import C, buildTestProject - from PyQt5.QtCore import pyqtSlot from PyQt5.QtPrintSupport import QPrintPreviewDialog from PyQt5.QtWidgets import QAction, QListWidgetItem +from pytestqt.qtbot import QtBot +from tools import C, buildTestProject from novelwriter import CONFIG, SHARED from novelwriter.constants import nwHeadFmt @@ -81,7 +81,9 @@ def testManuscript_Init(monkeypatch, qtbot: QtBot, nwGUI: GuiMain, projPath: Pat manus.show() manus.loadContent() assert manus.docPreview.toPlainText().strip() == "" - manus.close() + + nwGUI.closeProject() # This should auto-close the manuscript tool + assert manus.isHidden() # qtbot.stop() From 976ce16ac2b908af13a54e1616741ee4c8cf218f Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Thu, 2 May 2024 21:04:39 +0200 Subject: [PATCH 2/2] Update imports --- tests/test_tools/test_tools_manuscript.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_tools/test_tools_manuscript.py b/tests/test_tools/test_tools_manuscript.py index 00b26b4b..33f75c14 100644 --- a/tests/test_tools/test_tools_manuscript.py +++ b/tests/test_tools/test_tools_manuscript.py @@ -26,12 +26,10 @@ from pathlib import Path import pytest -from mocked import causeOSError from PyQt5.QtCore import pyqtSlot from PyQt5.QtPrintSupport import QPrintPreviewDialog from PyQt5.QtWidgets import QAction, QListWidgetItem from pytestqt.qtbot import QtBot -from tools import C, buildTestProject from novelwriter import CONFIG, SHARED from novelwriter.constants import nwHeadFmt @@ -42,6 +40,9 @@ from novelwriter.tools.manuscript import GuiManuscript from novelwriter.tools.manussettings import GuiBuildSettings from novelwriter.types import QtAlignAbsolute, QtAlignJustify, QtDialogApply, QtDialogSave +from tests.mocked import causeOSError +from tests.tools import C, buildTestProject + @pytest.mark.gui def testManuscript_Init(monkeypatch, qtbot: QtBot, nwGUI: GuiMain, projPath: Path, mockRnd):