[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57252] trunk/blender/source/blender: Fix #35640, part 1.
Lukas Toenne
lukas.toenne at googlemail.com
Wed Jun 5 21:06:28 CEST 2013
Revision: 57252
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57252
Author: lukastoenne
Date: 2013-06-05 19:06:27 +0000 (Wed, 05 Jun 2013)
Log Message:
-----------
Fix #35640, part 1. Set the id.lib pointer for nested bNodeTree data blocks inside material, scene, etc. on lib_link, so that the UI buttons get disabled when editing linked node trees. Thanks to Brecht
van Lommel for suggesting this fix.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/lamp.c
trunk/blender/source/blender/blenkernel/intern/material.c
trunk/blender/source/blender/blenkernel/intern/node.c
trunk/blender/source/blender/blenkernel/intern/texture.c
trunk/blender/source/blender/blenkernel/intern/world.c
trunk/blender/source/blender/blenloader/intern/readfile.c
Modified: trunk/blender/source/blender/blenkernel/intern/lamp.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/lamp.c 2013-06-05 15:54:41 UTC (rev 57251)
+++ trunk/blender/source/blender/blenkernel/intern/lamp.c 2013-06-05 19:06:27 UTC (rev 57252)
@@ -172,6 +172,9 @@
if (la->id.lib == NULL) return;
if (la->id.us == 1) {
id_clear_lib_data(bmain, &la->id);
+ /* nodetree uses same lib */
+ if (la->nodetree)
+ la->nodetree->id.lib = NULL;
return;
}
@@ -186,6 +189,9 @@
if (is_local && is_lib == FALSE) {
id_clear_lib_data(bmain, &la->id);
+ /* nodetree uses same lib */
+ if (la->nodetree)
+ la->nodetree->id.lib = NULL;
}
else if (is_local && is_lib) {
Lamp *la_new = BKE_lamp_copy(la);
Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c 2013-06-05 15:54:41 UTC (rev 57251)
+++ trunk/blender/source/blender/blenkernel/intern/material.c 2013-06-05 19:06:27 UTC (rev 57252)
@@ -308,6 +308,9 @@
if (ma->id.us == 1) {
id_clear_lib_data(bmain, &ma->id);
extern_local_material(ma);
+ /* nodetree uses same lib */
+ if (ma->nodetree)
+ ma->nodetree->id.lib = NULL;
return;
}
@@ -370,6 +373,9 @@
if (is_local && is_lib == FALSE) {
id_clear_lib_data(bmain, &ma->id);
extern_local_material(ma);
+ /* nodetree uses same lib */
+ if (ma->nodetree)
+ ma->nodetree->id.lib = NULL;
}
/* Both user and local, so copy. */
else if (is_local && is_lib) {
Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c 2013-06-05 15:54:41 UTC (rev 57251)
+++ trunk/blender/source/blender/blenkernel/intern/node.c 2013-06-05 19:06:27 UTC (rev 57252)
@@ -1124,6 +1124,7 @@
}
else {
newtree = MEM_dupallocN(ntree);
+ ntree->id.lib = NULL; /* same as owning datablock id.lib */
BKE_libblock_copy_data(&newtree->id, &ntree->id, true); /* copy animdata and ID props */
}
Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c 2013-06-05 15:54:41 UTC (rev 57251)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c 2013-06-05 19:06:27 UTC (rev 57252)
@@ -765,6 +765,9 @@
if (tex->id.us == 1) {
id_clear_lib_data(bmain, &tex->id);
extern_local_texture(tex);
+ /* nodetree uses same lib */
+ if (tex->nodetree)
+ tex->nodetree->id.lib = NULL;
return;
}
@@ -824,6 +827,9 @@
if (is_local && is_lib == FALSE) {
id_clear_lib_data(bmain, &tex->id);
extern_local_texture(tex);
+ /* nodetree uses same lib */
+ if (tex->nodetree)
+ tex->nodetree->id.lib = NULL;
}
else if (is_local && is_lib) {
Tex *tex_new = BKE_texture_copy(tex);
Modified: trunk/blender/source/blender/blenkernel/intern/world.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/world.c 2013-06-05 15:54:41 UTC (rev 57251)
+++ trunk/blender/source/blender/blenkernel/intern/world.c 2013-06-05 19:06:27 UTC (rev 57252)
@@ -179,6 +179,9 @@
if (wrld->id.lib == NULL) return;
if (wrld->id.us == 1) {
id_clear_lib_data(bmain, &wrld->id);
+ /* nodetree uses same lib */
+ if (wrld->nodetree)
+ wrld->nodetree->id.lib = NULL;
return;
}
@@ -191,6 +194,9 @@
if (is_local && is_lib == FALSE) {
id_clear_lib_data(bmain, &wrld->id);
+ /* nodetree uses same lib */
+ if (wrld->nodetree)
+ wrld->nodetree->id.lib = NULL;
}
else if (is_local && is_lib) {
World *wrld_new = BKE_world_copy(wrld);
Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c 2013-06-05 15:54:41 UTC (rev 57251)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c 2013-06-05 19:06:27 UTC (rev 57252)
@@ -2967,8 +2967,10 @@
la->ipo = newlibadr_us(fd, la->id.lib, la->ipo); // XXX deprecated - old animation system
- if (la->nodetree)
+ if (la->nodetree) {
lib_link_ntree(fd, &la->id, la->nodetree);
+ la->nodetree->id.lib = la->id.lib;
+ }
la->id.flag -= LIB_NEED_LINK;
}
@@ -3140,8 +3142,10 @@
}
}
- if (wrld->nodetree)
+ if (wrld->nodetree) {
lib_link_ntree(fd, &wrld->id, wrld->nodetree);
+ wrld->nodetree->id.lib = wrld->id.lib;
+ }
wrld->id.flag -= LIB_NEED_LINK;
}
@@ -3429,8 +3433,10 @@
if (tex->ot)
tex->ot->object = newlibadr(fd, tex->id.lib, tex->ot->object);
- if (tex->nodetree)
+ if (tex->nodetree) {
lib_link_ntree(fd, &tex->id, tex->nodetree);
+ tex->nodetree->id.lib = tex->id.lib;
+ }
tex->id.flag -= LIB_NEED_LINK;
}
@@ -3511,8 +3517,10 @@
}
}
- if (ma->nodetree)
+ if (ma->nodetree) {
lib_link_ntree(fd, &ma->id, ma->nodetree);
+ ma->nodetree->id.lib = ma->id.lib;
+ }
ma->id.flag -= LIB_NEED_LINK;
}
@@ -5160,6 +5168,7 @@
if (sce->nodetree) {
lib_link_ntree(fd, &sce->id, sce->nodetree);
+ sce->nodetree->id.lib = sce->id.lib;
composite_patch(sce->nodetree, sce);
}
More information about the Bf-blender-cvs
mailing list