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);
+                               }
                        }
                }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to