Improve handling of tool dialogs on project close

This commit is contained in:
Veronica Berglyd Olsen
2024-05-02 21:29:07 +02:00
parent c594e07c8c
commit 78e194d8c1
4 changed files with 21 additions and 11 deletions
+5 -1
View File
@@ -28,6 +28,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
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:
+5 -8
View File
@@ -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
+5 -1
View File
@@ -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")
+6 -1
View File
@@ -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")