From 95b825a4c5bcf346cf914c512cc05f4f5b6e500f Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 11 Jul 2017 12:02:44 +0200 Subject: [PATCH] Emit propertiesChanged on the global stack from the extruder stack But only when the setting that changed has a relation that is not settable per extruder. Fixes CURA-3521 --- cura/Settings/ExtruderStack.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 002778038b..e7f57eb4ef 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -25,6 +25,8 @@ class ExtruderStack(CuraContainerStack): self.addMetaDataEntry("type", "extruder_train") # For backward compatibility + self.propertiesChanged.connect(self._onPropertiesChanged) + ## Overridden from ContainerStack # # This will set the next stack and ensure that we register this stack as an extruder. @@ -85,6 +87,22 @@ class ExtruderStack(CuraContainerStack): if stacks: self.setNextStack(stacks[0]) + def _onPropertiesChanged(self, key, properties): + # When there is a setting that is not settable per extruder that depends on a value from a setting that is, + # we do not always get properly informed that we should re-evaluate the setting. So make sure to indicate + # something changed for those settings. + definitions = self.getNextStack().definition.findDefinitions(key = key) + if definitions: + has_global_dependencies = False + for relation in definitions[0].relations: + if not getattr(relation.target, "settable_per_extruder", True): + has_global_dependencies = True + break + + if has_global_dependencies: + self.getNextStack().propertiesChanged.emit(key, properties) + + extruder_stack_mime = MimeType( name = "application/x-cura-extruderstack", comment = "Cura Extruder Stack",