[Bf-blender-cvs] [7a9693f] master: Library API: pass Main struct to unlink functions

Campbell Barton noreply at git.blender.org
Mon Nov 2 11:48:45 CET 2015


Commit: 7a9693fa8ba2132e09a892dfa0e60736b741002a
Author: Campbell Barton
Date:   Mon Nov 2 21:20:03 2015 +1100
Branches: master
https://developer.blender.org/rB7a9693fa8ba2132e09a892dfa0e60736b741002a

Library API: pass Main struct to unlink functions

===================================================================

M	source/blender/blenkernel/BKE_group.h
M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/group.c
M	source/blender/blenkernel/intern/library.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/editors/object/object_group.c
M	source/blender/editors/space_outliner/outliner_tools.c
M	source/blender/makesrna/intern/rna_main_api.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_group.h b/source/blender/blenkernel/BKE_group.h
index d856e90..9056e48 100644
--- a/source/blender/blenkernel/BKE_group.h
+++ b/source/blender/blenkernel/BKE_group.h
@@ -41,7 +41,7 @@ struct Object;
 struct Scene;
 
 void          BKE_group_free(struct Group *group);
-void          BKE_group_unlink(struct Group *group);
+void          BKE_group_unlink(struct Main *bmain, struct Group *group);
 struct Group *BKE_group_add(struct Main *bmain, const char *name);
 struct Group *BKE_group_copy(struct Group *group);
 bool          BKE_group_object_add(struct Group *group, struct Object *ob, struct Scene *scene, struct Base *base);
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 45d14a3..91ea55f 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -79,7 +79,7 @@ void BKE_object_free_modifiers(struct Object *ob);
 void BKE_object_make_proxy(struct Object *ob, struct Object *target, struct Object *gob);
 void BKE_object_copy_proxy_drivers(struct Object *ob, struct Object *target);
 
-void BKE_object_unlink(struct Object *ob);
+void BKE_object_unlink(struct Main *bmain, struct Object *ob);
 bool BKE_object_exists_check(struct Object *obtest);
 bool BKE_object_is_in_editmode(struct Object *ob);
 bool BKE_object_is_in_editmode_vgroup(struct Object *ob);
diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c
index 3f68339..1502265 100644
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@ -73,9 +73,8 @@ void BKE_group_free(Group *group)
 	}
 }
 
-void BKE_group_unlink(Group *group)
+void BKE_group_unlink(Main *bmain, Group *group)
 {
-	Main *bmain = G.main;
 	Material *ma;
 	Object *ob;
 	Scene *sce;
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index d9439b5..c618795 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -406,11 +406,11 @@ bool id_unlink(ID *id, int test)
 			break;
 		case ID_GR:
 			if (test) return true;
-			BKE_group_unlink((Group *)id);
+			BKE_group_unlink(mainlib, (Group *)id);
 			break;
 		case ID_OB:
 			if (test) return true;
-			BKE_object_unlink((Object *)id);
+			BKE_object_unlink(mainlib, (Object *)id);
 			break;
 	}
 
@@ -1205,7 +1205,11 @@ void BKE_libblock_free_us(Main *bmain, void *idv)      /* test users */
 		else printf("ERROR block %s users %d\n", id->name, id->us);
 	}
 	if (id->us == 0) {
-		if (GS(id->name) == ID_OB) BKE_object_unlink((Object *)id);
+		switch (GS(id->name)) {
+			case ID_OB:
+				BKE_object_unlink(bmain, (Object *)id);
+				break;
+		}
 		
 		BKE_libblock_free(bmain, id);
 	}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index b6fcb04..456791e 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -478,9 +478,8 @@ static void unlink_object__unlinkModifierLinks(void *userData, Object *ob, Objec
 	}
 }
 
-void BKE_object_unlink(Object *ob)
+void BKE_object_unlink(Main *bmain, Object *ob)
 {
-	Main *bmain = G.main;
 	Object *obt;
 	Material *mat;
 	World *wrld;
diff --git a/source/blender/editors/object/object_group.c b/source/blender/editors/object/object_group.c
index 3c43f27..76a8a68 100644
--- a/source/blender/editors/object/object_group.c
+++ b/source/blender/editors/object/object_group.c
@@ -521,12 +521,13 @@ void OBJECT_OT_group_remove(wmOperatorType *ot)
 
 static int group_unlink_exec(bContext *C, wmOperator *UNUSED(op))
 {
+	Main *bmain = CTX_data_main(C);
 	Group *group = CTX_data_pointer_get_type(C, "group", &RNA_Group).data;
 
 	if (!group)
 		return OPERATOR_CANCELLED;
 
-	BKE_group_unlink(group);
+	BKE_group_unlink(bmain, group);
 
 	WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL);
 
diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c
index 863f09d..253430a 100644
--- a/source/blender/editors/space_outliner/outliner_tools.c
+++ b/source/blender/editors/space_outliner/outliner_tools.c
@@ -215,8 +215,9 @@ static void unlink_texture_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeEle
 	}
 }
 
-static void unlink_group_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *UNUSED(te),
-                            TreeStoreElem *tsep, TreeStoreElem *tselem)
+static void unlink_group_cb(
+        bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te),
+        TreeStoreElem *tsep, TreeStoreElem *tselem)
 {
 	Group *group = (Group *)tselem->id;
 	
@@ -227,7 +228,8 @@ static void unlink_group_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeEleme
 		}
 	}
 	else {
-		BKE_group_unlink(group);
+		Main *bmain = CTX_data_main(C);
+		BKE_group_unlink(bmain, group);
 	}
 }
 
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index 12994b0..8e28b35 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -226,7 +226,7 @@ static void rna_Main_objects_remove(Main *bmain, ReportList *reports, PointerRNA
 {
 	Object *object = object_ptr->data;
 	if (ID_REAL_USERS(object) <= 0) {
-		BKE_object_unlink(object); /* needed or ID pointers to this are not cleared */
+		BKE_object_unlink(bmain, object); /* needed or ID pointers to this are not cleared */
 		BKE_libblock_free(bmain, object);
 		RNA_POINTER_INVALIDATE(object_ptr);
 	}
@@ -539,7 +539,7 @@ static Group *rna_Main_groups_new(Main *bmain, const char *name)
 static void rna_Main_groups_remove(Main *bmain, PointerRNA *group_ptr)
 {
 	Group *group = group_ptr->data;
-	BKE_group_unlink(group);
+	BKE_group_unlink(bmain, group);
 	BKE_libblock_free(bmain, group);
 	RNA_POINTER_INVALIDATE(group_ptr);
 }




More information about the Bf-blender-cvs mailing list