[Bf-blender-cvs] [031aab8] id-remap: Some minor tweaks & cleanup.

Bastien Montagne noreply at git.blender.org
Sun Aug 23 18:47:23 CEST 2015


Commit: 031aab8d0cc6974d112454d0dacc1d35e00e8dfe
Author: Bastien Montagne
Date:   Sun Aug 23 16:34:19 2015 +0200
Branches: id-remap
https://developer.blender.org/rB031aab8d0cc6974d112454d0dacc1d35e00e8dfe

Some minor tweaks & cleanup.

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

M	source/blender/blenkernel/intern/library.c
M	source/blender/editors/space_buttons/buttons_context.c
M	source/blender/editors/space_outliner/outliner_tools.c

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

diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 745e539..dfdf7c3 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -889,14 +889,21 @@ void BKE_library_callback_remap_editor_id_reference_set(void (*func)(const ID *,
 	remap_editor_id_reference_cb = func;
 }
 
+typedef struct IDRemap {
+	Main *bmain;
+	ID *old_id;
+	ID *new_id;
+	ID *id;  /* The ID in which we are replacing old_id by new_id usages. */
+	int skipped;  /* Number of usecase that could not be remmapped (e.g.: obdata when in edit mode). */
+} IDRemap;
 
 static bool foreach_libblock_remap_callback(void *user_data, ID **id_p, int UNUSED(cb_flag))
 {
-	Main *bmain = ((void **)user_data)[0];
-	ID *old_id = ((void **)user_data)[1];
-	ID *new_id = ((void **)user_data)[2];
-	ID *id = ((void **)user_data)[3];
-	int skipped = GET_INT_FROM_POINTER(((void **)user_data)[4]);
+	IDRemap *id_remap_data = user_data;
+	Main *bmain = id_remap_data->bmain;
+	ID *old_id = id_remap_data->old_id;
+	ID *new_id = id_remap_data->new_id;
+	ID *id = id_remap_data->id;
 
 	/* Special hack in case it's Object->data, this is *not* covered by foreach_ID_link.
 	 * Here we simply do nothing in case we are in edit mode, otherwise we replace the ID! */
@@ -905,7 +912,7 @@ static bool foreach_libblock_remap_callback(void *user_data, ID **id_p, int UNUS
 
 		if (ob->data == old_id) {
 			if (BKE_object_is_in_editmode(ob)) {
-				skipped++;
+				id_remap_data->skipped++;
 			}
 			else {
 				ob->data = new_id;
@@ -919,15 +926,13 @@ static bool foreach_libblock_remap_callback(void *user_data, ID **id_p, int UNUS
 		DAG_id_tag_update_ex(bmain, id, OB_RECALC_OB | OB_RECALC_DATA);
 	}
 
-	((void **)user_data)[4] = SET_INT_IN_POINTER(skipped);
-
 	return true;
 }
 
 /** Replace all references in .blend file to \a old_id by \a new_id. */
 void BKE_libblock_remap(Main *bmain, ID *old_id, ID *new_id)
 {
-	void *user_data[5] = {(void *)bmain, (void *)old_id, (void *)new_id, NULL, SET_INT_IN_POINTER(0)};
+	IDRemap id_remap_data = {(void *)bmain, (void *)old_id, (void *)new_id, NULL, 0};
 	ListBase *lb_array[MAX_LIBARRAY];
 	int skipped;
 	int i;
@@ -948,8 +953,8 @@ void BKE_libblock_remap(Main *bmain, ID *old_id, ID *new_id)
 		ID *id;
 		for (id = lb_array[i]->first; id; id = id->next) {
 			printf("\tchecking id %s (%p)\n", id->name, id);
-			user_data[3] = (void *)id;
-			BKE_library_foreach_ID_link(id, foreach_libblock_remap_callback, (void *)user_data, IDWALK_NOP);
+			id_remap_data.id = id;
+			BKE_library_foreach_ID_link(id, foreach_libblock_remap_callback, (void *)&id_remap_data, IDWALK_NOP);
 		}
 	}
 
@@ -957,12 +962,13 @@ void BKE_libblock_remap(Main *bmain, ID *old_id, ID *new_id)
 		free_notifier_reference_cb(old_id);
 	}
 
+	/* We assume editors do not hold references to their IDs... */
 	if (remap_editor_id_reference_cb) {
 		remap_editor_id_reference_cb(old_id, new_id);
 	}
 
 	/* All ID 'users' do not actually incref it, so we just assume all uses of this ID have been cleared... */
-	skipped = GET_INT_FROM_POINTER(((void **)user_data)[4]);
+	skipped = id_remap_data.skipped;
 	if (old_id->flag & LIB_FAKEUSER) {
 		BLI_assert(old_id->us - 1 - skipped >= 0);
 		if (old_id->us > 1) {
diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c
index 3118e28..05316ba 100644
--- a/source/blender/editors/space_buttons/buttons_context.c
+++ b/source/blender/editors/space_buttons/buttons_context.c
@@ -1214,6 +1214,7 @@ void ED_buttons_id_remap(SpaceButs *sbuts, const ID *old_id, ID *new_id)
 		}
 		else {
 			RNA_id_pointer_create(new_id, &path->ptr[i]);
+			/* TODO: Check path further down remains valid? Or nullify it systematically? */
 		}
 	}
 }
diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c
index 3bfa641..336af47 100644
--- a/source/blender/editors/space_outliner/outliner_tools.c
+++ b/source/blender/editors/space_outliner/outliner_tools.c
@@ -836,7 +836,7 @@ enum {
 	OL_OP_TOGVIS,
 	OL_OP_TOGSEL,
 	OL_OP_TOGREN,
-	OL_OP_RENAME
+	OL_OP_RENAME,
 };
 
 static EnumPropertyItem prop_object_op_types[] = {




More information about the Bf-blender-cvs mailing list