From 73515c96d89d2e9d8a0dd86d70e37b70b62e24b6 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 11 Jun 2024 21:59:58 +0200 Subject: [PATCH 1/2] Add a method in the shared object to ensure document editor is saved --- novelwriter/shared.py | 13 +++++++++++++ novelwriter/tools/manuscript.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/novelwriter/shared.py b/novelwriter/shared.py index be323386..77d85cd7 100644 --- a/novelwriter/shared.py +++ b/novelwriter/shared.py @@ -204,6 +204,19 @@ class SharedData(QObject): self._resetIdleTimer() return + def ensureEditorSaved(self, tHandle: str | None) -> None: + """Ensure that the editor content is saved. Optionally, only if + it is a specific handle. + """ + docEditor = self.mainGui.docEditor + if ( + self.hasProject and docEditor.docHandle + and (tHandle is None or tHandle == docEditor.docHandle) + ): + logger.debug("Saving editor document before action") + docEditor.saveText() + return + def updateSpellCheckLanguage(self, reload: bool = False) -> None: """Update the active spell check language from settings.""" from novelwriter import CONFIG diff --git a/novelwriter/tools/manuscript.py b/novelwriter/tools/manuscript.py index 0d32457d..5f29a08f 100644 --- a/novelwriter/tools/manuscript.py +++ b/novelwriter/tools/manuscript.py @@ -343,7 +343,7 @@ class GuiManuscript(NDialog): return # Make sure editor content is saved before we start - SHARED.mainGui.saveDocument() + SHARED.ensureEditorSaved(None) docBuild = NWBuildDocument(SHARED.project, build) docBuild.setPreviewMode(True) From c03e832c7b455865f824f589d8b2ba9d2685905a Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 11 Jun 2024 22:00:59 +0200 Subject: [PATCH 2/2] Make sure editor document is saved before using first title to set item label (#1914) --- novelwriter/gui/projtree.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py index 5ba158af..5c4f727d 100644 --- a/novelwriter/gui/projtree.py +++ b/novelwriter/gui/projtree.py @@ -32,10 +32,8 @@ from enum import Enum from time import time from typing import TYPE_CHECKING -from PyQt5.QtCore import QPoint, QTimer, Qt, pyqtSignal, pyqtSlot -from PyQt5.QtGui import ( - QDragEnterEvent, QDragMoveEvent, QDropEvent, QIcon, QMouseEvent, QPalette -) +from PyQt5.QtCore import QPoint, Qt, QTimer, pyqtSignal, pyqtSlot +from PyQt5.QtGui import QDragEnterEvent, QDragMoveEvent, QDropEvent, QIcon, QMouseEvent, QPalette from PyQt5.QtWidgets import ( QAbstractItemView, QAction, QDialog, QFrame, QHBoxLayout, QHeaderView, QLabel, QMenu, QShortcut, QSizePolicy, QTreeWidget, QTreeWidgetItem, @@ -44,14 +42,14 @@ from PyQt5.QtWidgets import ( from novelwriter import CONFIG, SHARED from novelwriter.common import minmax -from novelwriter.constants import nwHeaders, nwUnicode, trConst, nwLabels +from novelwriter.constants import nwHeaders, nwLabels, nwUnicode, trConst from novelwriter.core.coretools import DocDuplicator, DocMerger, DocSplitter from novelwriter.core.item import NWItem from novelwriter.dialogs.docmerge import GuiDocMerge from novelwriter.dialogs.docsplit import GuiDocSplit from novelwriter.dialogs.editlabel import GuiEditLabel from novelwriter.dialogs.projectsettings import GuiProjectSettings -from novelwriter.enum import nwDocMode, nwItemType, nwItemClass, nwItemLayout +from novelwriter.enum import nwDocMode, nwItemClass, nwItemLayout, nwItemType from novelwriter.extensions.modified import NIconToolButton from novelwriter.gui.theme import STYLES_MIN_TOOLBUTTON from novelwriter.types import QtAlignLeft, QtAlignRight, QtMouseLeft, QtMouseMiddle, QtUserRole @@ -1830,6 +1828,7 @@ class _TreeContextMenu(QMenu): def _itemHeader(self) -> None: """Check if there is a header that can be used for rename.""" + SHARED.ensureEditorSaved(self._handle) if hItem := SHARED.project.index.getItemHeading(self._handle, "T0001"): action = self.addAction(self.tr("Rename to Heading")) action.triggered.connect(