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 __future__ import annotations
from enum import Enum from enum import Enum
from typing import TYPE_CHECKING
from PyQt5.QtCore import QSize, Qt from PyQt5.QtCore import QSize, Qt
from PyQt5.QtGui import QWheelEvent from PyQt5.QtGui import QWheelEvent
@@ -38,10 +39,13 @@ from PyQt5.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
if TYPE_CHECKING: # pragma: no cover
from novelwriter.guimain import GuiMain
class NToolDialog(QDialog): class NToolDialog(QDialog):
def __init__(self, parent: QWidget | None = None) -> None: def __init__(self, parent: GuiMain) -> None:
super().__init__(parent=parent) super().__init__(parent=parent)
self.setModal(False) self.setModal(False)
if CONFIG.osDarwin: if CONFIG.osDarwin:
+5 -8
View File
@@ -198,7 +198,7 @@ class SharedData(QObject):
def closeProject(self) -> None: def closeProject(self) -> None:
"""Close the current project.""" """Close the current project."""
self._closeDialogs() self._closeToolDialogs()
self.project.closeProject(self._idleTime) self.project.closeProject(self._idleTime)
self._resetProject() self._resetProject()
self._resetIdleTimer() self._resetIdleTimer()
@@ -357,15 +357,12 @@ class SharedData(QObject):
self._idleTime = 0.0 self._idleTime = 0.0
return return
def _closeDialogs(self) -> None: def _closeToolDialogs(self) -> None:
"""Close non-modal dialogs.""" """Close all open tool dialogs."""
from novelwriter.tools.manuscript import GuiManuscript from novelwriter.extensions.modified import NToolDialog
from novelwriter.tools.writingstats import GuiWritingStats
for widget in self.mainGui.children(): for widget in self.mainGui.children():
if isinstance(widget, (GuiManuscript, GuiWritingStats)): if isinstance(widget, NToolDialog):
widget.close() widget.close()
return return
# END Class SharedData # END Class SharedData
+5 -1
View File
@@ -28,6 +28,7 @@ import logging
from datetime import datetime from datetime import datetime
from time import time from time import time
from typing import TYPE_CHECKING
from PyQt5.QtCore import Qt, QTimer, QUrl, pyqtSignal, pyqtSlot from PyQt5.QtCore import Qt, QTimer, QUrl, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QCloseEvent, QColor, QCursor, QFont, QPalette, QResizeEvent from PyQt5.QtGui import QCloseEvent, QColor, QCursor, QFont, QPalette, QResizeEvent
@@ -56,6 +57,9 @@ from novelwriter.types import (
QtSizeExpanding, QtSizeIgnored, QtUserRole QtSizeExpanding, QtSizeIgnored, QtUserRole
) )
if TYPE_CHECKING: # pragma: no cover
from novelwriter.guimain import GuiMain
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -69,7 +73,7 @@ class GuiManuscript(NToolDialog):
D_KEY = QtUserRole D_KEY = QtUserRole
def __init__(self, parent: QWidget) -> None: def __init__(self, parent: GuiMain) -> None:
super().__init__(parent=parent) super().__init__(parent=parent)
logger.debug("Create: GuiManuscript") logger.debug("Create: GuiManuscript")
+6 -1
View File
@@ -25,6 +25,8 @@ from __future__ import annotations
import logging import logging
from typing import TYPE_CHECKING
from PyQt5.QtCore import QEvent, pyqtSignal, pyqtSlot from PyQt5.QtCore import QEvent, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QFont, QIcon, QSyntaxHighlighter, QTextCharFormat, QTextDocument from PyQt5.QtGui import QFont, QIcon, QSyntaxHighlighter, QTextCharFormat, QTextDocument
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
@@ -51,6 +53,9 @@ from novelwriter.types import (
QtRoleApply, QtRoleReject, QtUserRole QtRoleApply, QtRoleReject, QtUserRole
) )
if TYPE_CHECKING: # pragma: no cover
from novelwriter.guimain import GuiMain
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -69,7 +74,7 @@ class GuiBuildSettings(NToolDialog):
newSettingsReady = pyqtSignal(BuildSettings) newSettingsReady = pyqtSignal(BuildSettings)
def __init__(self, parent: QWidget, build: BuildSettings) -> None: def __init__(self, parent: GuiMain, build: BuildSettings) -> None:
super().__init__(parent=parent) super().__init__(parent=parent)
logger.debug("Create: GuiBuildSettings") logger.debug("Create: GuiBuildSettings")