@@ -1186,6 +1186,10 @@ def __init__(self, node, attributeDesc: desc.Shape, isOutput: bool, root=None, p
11861186 # Connect geometry attribute valueChanged to emit geometryChanged signal.
11871187 def _initValue (self ):
11881188 super ()._initValue ()
1189+ # Using Attribute.valueChanged for the userName, userColor, geometry properties results in a segmentation fault.
1190+ # As a workaround, we manually connect valueChanged to shapeChanged or geometryChanged.
1191+ self .value .get ("userName" ).valueChanged .connect (self ._onShapeChanged )
1192+ self .value .get ("userColor" ).valueChanged .connect (self ._onShapeChanged )
11891193 self .geometry .valueChanged .connect (self ._onGeometryChanged )
11901194
11911195 # Override
@@ -1230,32 +1234,20 @@ def _getUserName(self) -> str:
12301234 """
12311235 Return the shape attribute user name for display.
12321236 """
1233- if self .isLink :
1234- return self .inputLink .value .get ("userName" ).value
1235- return self ._value .get ("userName" ).value
1236-
1237- @raiseIfLink
1238- def _setUserName (self , color : str ):
1239- """
1240- Set the shape attribute user name for display.
1241- """
1242- self ._value .get ("userName" ).value = color
1243- self .shapeChanged .emit ()
1237+ return self .value .get ("userName" ).value
12441238
12451239 def _getUserColor (self ) -> str :
12461240 """
12471241 Return the shape attribute user color for display.
12481242 """
1249- if self .isLink :
1250- return self .inputLink .value .get ("userColor" ).value
1251- return self ._value .get ("userColor" ).value
1243+ return self .value .get ("userColor" ).value
12521244
1253- @raiseIfLink
1254- def _setUserColor (self , color : str ):
1255- """
1256- Set the shape attribute user color for display.
1245+ @Slot ()
1246+ def _onShapeChanged (self ):
1247+ """
1248+ Emit shapeChanged signal.
1249+ Used when shape userName or userColor value changed.
12571250 """
1258- self ._value .get ("userColor" ).value = color
12591251 self .shapeChanged .emit ()
12601252
12611253 @Slot ()
@@ -1274,9 +1266,9 @@ def _onGeometryChanged(self):
12741266 # Whether the shape is displayable.
12751267 isVisible = Property (bool , _getVisible , _setVisible , notify = shapeChanged )
12761268 # The shape user name for display.
1277- userName = Property (str , _getUserName , _setUserName , notify = shapeChanged )
1269+ userName = Property (str , _getUserName , notify = shapeChanged )
12781270 # The shape user color for display.
1279- userColor = Property (str , _getUserColor , _setUserColor , notify = shapeChanged )
1271+ userColor = Property (str , _getUserColor , notify = shapeChanged )
12801272 # The shape geometry group attribute.
12811273 geometry = Property (Variant , lambda self : self .value .get ("geometry" ), notify = geometryChanged )
12821274 # Override hasDisplayableShape property.
0 commit comments