[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