[Bf-blender-cvs] [a2ec403] id-remap: Avoid looping over screen-data for ID types which aren't supported

Campbell Barton noreply at git.blender.org
Fri Jun 17 17:11:47 CEST 2016


Commit: a2ec403686c44ec3d49d1ceca99c1b5151c61095
Author: Campbell Barton
Date:   Sat Jun 18 01:14:06 2016 +1000
Branches: id-remap
https://developer.blender.org/rBa2ec403686c44ec3d49d1ceca99c1b5151c61095

Avoid looping over screen-data for ID types which aren't supported

Unlinking a group for eg would loop over all view3d data.

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

M	source/blender/editors/space_action/space_action.c
M	source/blender/editors/space_clip/space_clip.c
M	source/blender/editors/space_graph/space_graph.c
M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/space_logic/space_logic.c
M	source/blender/editors/space_nla/space_nla.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/space_sequencer/space_sequencer.c
M	source/blender/editors/space_text/space_text.c
M	source/blender/editors/space_view3d/space_view3d.c

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

diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c
index 64b140a..671d6bb 100644
--- a/source/blender/editors/space_action/space_action.c
+++ b/source/blender/editors/space_action/space_action.c
@@ -619,6 +619,10 @@ static void action_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, I
 {
 	SpaceAction *sact = (SpaceAction *)slink;
 
+	if (!ELEM(GS(old_id->name), ID_GR)) {
+		return;
+	}
+
 	if ((ID *)sact->ads.filter_grp == old_id) {
 		sact->ads.filter_grp = (Group *)new_id;
 	}
diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c
index f844095..415839a 100644
--- a/source/blender/editors/space_clip/space_clip.c
+++ b/source/blender/editors/space_clip/space_clip.c
@@ -1517,6 +1517,10 @@ static void clip_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID
 {
 	SpaceClip *sclip = (SpaceClip *)slink;
 
+	if (!ELEM(GS(old_id->name), ID_MC, ID_MSK)) {
+		return;
+	}
+
 	if ((ID *)sclip->clip == old_id) {
 		sclip->clip = (MovieClip *)new_id;
 		id_us_ensure_real(new_id);
diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c
index bc851ea..a728469 100644
--- a/source/blender/editors/space_graph/space_graph.c
+++ b/source/blender/editors/space_graph/space_graph.c
@@ -632,6 +632,10 @@ static void graph_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID
 {
 	SpaceIpo *sgraph = (SpaceIpo *)slink;
 
+	if (!ELEM(GS(old_id->name), ID_GR)) {
+		return;
+	}
+
 	if ((ID *)sgraph->ads->filter_grp == old_id) {
 		sgraph->ads->filter_grp = (Group *)new_id;
 	}
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index f2cb9b4..35a658e 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -987,6 +987,10 @@ static void image_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID
 {
 	SpaceImage *simg = (SpaceImage *)slink;
 
+	if (!ELEM(GS(old_id->name), ID_IM, ID_GD, ID_MSK)) {
+		return;
+	}
+
 	if ((ID *)simg->image == old_id) {
 		simg->image = (Image *)new_id;
 		id_us_ensure_real(new_id);
diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c
index 9ca93dd..69966e9 100644
--- a/source/blender/editors/space_logic/space_logic.c
+++ b/source/blender/editors/space_logic/space_logic.c
@@ -307,6 +307,10 @@ static void logic_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID
 {
 	SpaceLogic *slog = (SpaceLogic *)slink;
 
+	if (!ELEM(GS(old_id->name), ID_GD)) {
+		return;
+	}
+
 	if ((ID *)slog->gpd == old_id) {
 		slog->gpd = (bGPdata *)new_id;
 		id_us_min(old_id);
diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c
index 7b66ddf..3b56040 100644
--- a/source/blender/editors/space_nla/space_nla.c
+++ b/source/blender/editors/space_nla/space_nla.c
@@ -506,6 +506,10 @@ static void nla_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID *
 {
 	SpaceNla *snla = (SpaceNla *)slink;
 
+	if (!ELEM(GS(old_id->name), ID_GR)) {
+		return;
+	}
+
 	if ((ID *)snla->ads->filter_grp == old_id) {
 		snla->ads->filter_grp = (Group *)new_id;
 	}
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index eaa0767..4ef703c 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -848,11 +848,12 @@ static void node_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID
 			snode->from = new_id;
 		}
 	}
-
-	if ((ID *)snode->gpd == old_id) {
-		snode->gpd = (bGPdata *)new_id;
-		id_us_min(old_id);
-		id_us_plus(new_id);
+	else if (GS(old_id->name) == ID_GD) {
+		if ((ID *)snode->gpd == old_id) {
+			snode->gpd = (bGPdata *)new_id;
+			id_us_min(old_id);
+			id_us_plus(new_id);
+		}
 	}
 }
 
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index 02a7240..a2a8029 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -694,6 +694,10 @@ static void sequencer_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id
 {
 	SpaceSeq *sseq = (SpaceSeq *)slink;
 
+	if (!ELEM(GS(old_id->name), ID_GD)) {
+		return;
+	}
+
 	if ((ID *)sseq->gpd == old_id) {
 		sseq->gpd = (bGPdata *)new_id;
 		id_us_min(old_id);
diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c
index 304c615..0dea59f 100644
--- a/source/blender/editors/space_text/space_text.c
+++ b/source/blender/editors/space_text/space_text.c
@@ -567,6 +567,10 @@ static void text_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID
 {
 	SpaceText *stext = (SpaceText *)slink;
 
+	if (!ELEM(GS(old_id->name), ID_GD)) {
+		return;
+	}
+
 	if ((ID *)stext->text == old_id) {
 		stext->text = (Text *)new_id;
 		id_us_ensure_real(new_id);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index c0242f6..96dda65 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -1406,6 +1406,10 @@ static void view3d_id_remap(ScrArea *sa, SpaceLink *slink, ID *old_id, ID *new_i
 	ARegion *ar;
 	bool is_local = false;
 
+	if (!ELEM(GS(old_id->name), ID_OB, ID_MA, ID_IM, ID_MC)) {
+		return;
+	}
+
 	for (v3d = (View3D *)slink; v3d; v3d = v3d->localvd, is_local = true) {
 		if ((ID *)v3d->camera == old_id) {
 			v3d->camera = (Object *)new_id;
@@ -1436,16 +1440,18 @@ static void view3d_id_remap(ScrArea *sa, SpaceLink *slink, ID *old_id, ID *new_i
 		}
 #endif
 
-		for (BGpic *bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
-			if ((ID *)bgpic->ima == old_id) {
-				bgpic->ima = (Image *)new_id;
-				id_us_min(old_id);
-				id_us_plus(new_id);
-			}
-			if ((ID *)bgpic->clip == old_id) {
-				bgpic->clip = (MovieClip *)new_id;
-				id_us_min(old_id);
-				id_us_plus(new_id);
+		if (ELEM(GS(old_id->name), ID_IM, ID_MC)) {
+			for (BGpic *bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
+				if ((ID *)bgpic->ima == old_id) {
+					bgpic->ima = (Image *)new_id;
+					id_us_min(old_id);
+					id_us_plus(new_id);
+				}
+				if ((ID *)bgpic->clip == old_id) {
+					bgpic->clip = (MovieClip *)new_id;
+					id_us_min(old_id);
+					id_us_plus(new_id);
+				}
 			}
 		}




More information about the Bf-blender-cvs mailing list