From ceec43db6716de3f5f0471d6eda4daf008ff64a2 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Wed, 1 May 2024 22:09:43 +0200 Subject: [PATCH 1/2] Make sure open document is saved before we update preview or build manuscript (#1835) --- novelwriter/tools/manusbuild.py | 7 ++++--- novelwriter/tools/manuscript.py | 3 +++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/novelwriter/tools/manusbuild.py b/novelwriter/tools/manusbuild.py index 68b5e867..e27e8b6a 100644 --- a/novelwriter/tools/manusbuild.py +++ b/novelwriter/tools/manusbuild.py @@ -44,9 +44,7 @@ from novelwriter.core.item import NWItem from novelwriter.enum import nwBuildFmt from novelwriter.extensions.modified import NIconToolButton from novelwriter.extensions.simpleprogress import NProgressSimple -from novelwriter.types import ( - QtAlignCenter, QtDialogClose, QtRoleAction, QtRoleReject, QtUserRole -) +from novelwriter.types import QtAlignCenter, QtDialogClose, QtRoleAction, QtRoleReject, QtUserRole logger = logging.getLogger(__name__) @@ -328,6 +326,9 @@ class GuiManuscriptBuild(QDialog): ): return False + # Make sure editor content is saved before we start + SHARED.mainGui.saveDocument() + docBuild = NWBuildDocument(SHARED.project, self._build) docBuild.queueAll() diff --git a/novelwriter/tools/manuscript.py b/novelwriter/tools/manuscript.py index 72a3442e..68a30f6f 100644 --- a/novelwriter/tools/manuscript.py +++ b/novelwriter/tools/manuscript.py @@ -342,6 +342,9 @@ class GuiManuscript(QDialog): if not (build := self._getSelectedBuild()): return + # Make sure editor content is saved before we start + SHARED.mainGui.saveDocument() + docBuild = NWBuildDocument(SHARED.project, build) docBuild.setPreviewMode(True) docBuild.queueAll() From cfb19a697a74ccb4c95db451eee9726898aa969b Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Wed, 1 May 2024 22:10:54 +0200 Subject: [PATCH 2/2] Restore build preview scroll bar after update (#1837) --- novelwriter/tools/manuscript.py | 11 ++++++----- tests/test_tools/test_tools_manuscript.py | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/novelwriter/tools/manuscript.py b/novelwriter/tools/manuscript.py index 68a30f6f..ed25277b 100644 --- a/novelwriter/tools/manuscript.py +++ b/novelwriter/tools/manuscript.py @@ -752,6 +752,7 @@ class _PreviewWidget(QTextBrowser): self._docTime = 0 self._buildName = "" + self._scrollPos = 0 # Document Setup dPalette = self.palette() @@ -848,6 +849,7 @@ class _PreviewWidget(QTextBrowser): self.buildProgress.setValue(0) self.buildProgress.setCentreText(None) self.buildProgress.setVisible(True) + self._scrollPos = self.verticalScrollBar().value() self.setPlaceholderText("") self.clear() return @@ -860,7 +862,6 @@ class _PreviewWidget(QTextBrowser): def setContent(self, data: dict) -> None: """Set the content of the preview widget.""" - sPos = self.verticalScrollBar().value() QApplication.setOverrideCursor(QCursor(Qt.CursorShape.WaitCursor)) self.buildProgress.setCentreText(self.tr("Processing ...")) @@ -877,7 +878,6 @@ class _PreviewWidget(QTextBrowser): cursor = self.textCursor() cursor.insertText("\t") - self.verticalScrollBar().setValue(sPos) self._docTime = checkInt(data.get("time"), 0) self._updateBuildAge() @@ -888,7 +888,7 @@ class _PreviewWidget(QTextBrowser): self.buildProgress.setCentreText(self.tr("Done")) QApplication.restoreOverrideCursor() QApplication.processEvents() - QTimer.singleShot(300, self._hideProgress) + QTimer.singleShot(300, self._postUpdate) return @@ -943,9 +943,10 @@ class _PreviewWidget(QTextBrowser): return @pyqtSlot() - def _hideProgress(self) -> None: - """Clean up the build progress bar.""" + def _postUpdate(self) -> None: + """Run tasks after content update.""" self.buildProgress.setVisible(False) + self.verticalScrollBar().setValue(self._scrollPos) return ## diff --git a/tests/test_tools/test_tools_manuscript.py b/tests/test_tools/test_tools_manuscript.py index 5e80767f..b8856516 100644 --- a/tests/test_tools/test_tools_manuscript.py +++ b/tests/test_tools/test_tools_manuscript.py @@ -270,7 +270,7 @@ def testManuscript_Features(monkeypatch, qtbot, nwGUI, projPath, mockRnd): assert manus.docPreview.document().defaultTextOption().alignment() == QtAlignAbsolute # Tests are too fast to trigger this one, so we trigger it manually to ensure it isn't failing - manus.docPreview._hideProgress() + manus.docPreview._postUpdate() # Builds # ======