Make sure dialogs close when project closes (#1848)

This commit is contained in:
Veronica Berglyd Olsen
2024-05-02 21:08:46 +02:00
committed by GitHub
2 changed files with 24 additions and 9 deletions
+16 -4
View File
@@ -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
+8 -5
View File
@@ -20,18 +20,16 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
from __future__ import annotations
import pytest
import sys
from pathlib import Path
from pytestqt.qtbot import QtBot
from mocked import causeOSError
from tools import C, buildTestProject
import pytest
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtPrintSupport import QPrintPreviewDialog
from PyQt5.QtWidgets import QAction, QListWidgetItem
from pytestqt.qtbot import QtBot
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):
@@ -81,7 +82,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()