38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
import bpy
|
|
|
|
owner = object()
|
|
|
|
|
|
def name_change_callback(cls):
|
|
for ntree in bpy.data.node_groups:
|
|
if ntree.bl_idname == "ScriptingNodesTree":
|
|
key = (
|
|
cls.collection_key_overwrite
|
|
if cls.collection_key_overwrite
|
|
else cls.bl_idname
|
|
)
|
|
for ref in ntree.node_collection(key).refs:
|
|
node = ref.node
|
|
if node and node.name != ref.name:
|
|
ref.name = node.name
|
|
node.on_node_name_change()
|
|
node._evaluate(bpy.context)
|
|
return
|
|
|
|
|
|
def subscribe_to_name_change():
|
|
unsubscribe_from_name_change()
|
|
for cls in bpy.types.Node.__subclasses__():
|
|
if getattr(cls, "is_sn", False):
|
|
subscribe_to = (cls, "name")
|
|
bpy.msgbus.subscribe_rna(
|
|
key=subscribe_to,
|
|
owner=owner,
|
|
args=(cls,),
|
|
notify=name_change_callback,
|
|
)
|
|
|
|
|
|
def unsubscribe_from_name_change():
|
|
bpy.msgbus.clear_by_owner(owner)
|