From 6b4aac023578955d9d53244d13373bf3eac705dc Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 20 May 2025 21:16:34 +0200 Subject: [PATCH] Use a copy of the build settings for the build settings dialog (#2350) --- novelwriter/core/buildsettings.py | 2 +- novelwriter/tools/manussettings.py | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/novelwriter/core/buildsettings.py b/novelwriter/core/buildsettings.py index 6129de05..c44d9223 100644 --- a/novelwriter/core/buildsettings.py +++ b/novelwriter/core/buildsettings.py @@ -390,7 +390,7 @@ class BuildSettings: def setValue(self, key: str, value: T_BuildValue) -> None: """Set a specific value for a build setting.""" if (d := SETTINGS_TEMPLATE.get(key)) and len(d) == 2 and isinstance(value, d[0]): - self._changed = value != self._settings[key] + self._changed |= (value != self._settings[key]) self._settings[key] = value return diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index 521e08a0..967a03ff 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -80,7 +80,8 @@ class GuiBuildSettings(NToolDialog): logger.debug("Create: GuiBuildSettings") self.setObjectName("GuiBuildSettings") - self._build = build + # Make a copy of the build object + self._build = BuildSettings.fromDict(build.pack()) self.setWindowTitle(self.tr("Manuscript Build Settings")) self.setMinimumSize(700, 400) @@ -184,6 +185,7 @@ class GuiBuildSettings(NToolDialog): settings. """ logger.debug("Closing: GuiBuildSettings") + self._applyChanges() self._askToSaveBuild() self._saveSettings() event.accept() @@ -209,6 +211,7 @@ class GuiBuildSettings(NToolDialog): @pyqtSlot("QAbstractButton*") def _dialogButtonClicked(self, button: QAbstractButton) -> None: """Handle button clicks from the dialog button box.""" + self._applyChanges() role = self.buttonBox.buttonRole(button) if role == QtRoleApply: self._emitBuildData() @@ -216,6 +219,7 @@ class GuiBuildSettings(NToolDialog): self._emitBuildData() self.close() elif role == QtRoleReject: + self._build.resetChangedState() self.close() return @@ -228,10 +232,9 @@ class GuiBuildSettings(NToolDialog): whether the user wants to save them. """ if self._build.changed: - response = SHARED.question(self.tr( + if SHARED.question(self.tr( "Do you want to save your changes to '{0}'?" - ).format(self._build.name)) - if response: + ).format(self._build.name)): self._emitBuildData() self._build.resetChangedState() return @@ -246,14 +249,17 @@ class GuiBuildSettings(NToolDialog): pOptions.setValue("GuiBuildSettings", "treeWidth", treeWidth) pOptions.setValue("GuiBuildSettings", "filterWidth", filterWidth) pOptions.saveSettings() + return + def _applyChanges(self) -> None: + """Apply all settings changes to the build object.""" + self._build.setName(self.editBuildName.text()) + self.optTabHeadings.saveContent() + self.optTabFormatting.saveContent() return def _emitBuildData(self) -> None: """Assemble the build data and emit the signal.""" - self._build.setName(self.editBuildName.text()) - self.optTabHeadings.saveContent() - self.optTabFormatting.saveContent() self.newSettingsReady.emit(self._build) self._build.resetChangedState() return