Commit: 21b5ce57f5f5c3e618d42e002ac4e2d0f38365bd
Author: Bastien Montagne
Date:   Thu Jun 16 18:06:51 2016 +0200
Branches: id-remap
https://developer.blender.org/rB21b5ce57f5f5c3e618d42e002ac4e2d0f38365bd

Fix bad handling of RegionView3Ds in View3D ID remap callback.

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

M       source/blender/editors/space_view3d/space_view3d.c

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

diff --git a/source/blender/editors/space_view3d/space_view3d.c 
b/source/blender/editors/space_view3d/space_view3d.c
index c875e71..c0242f6 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -1404,22 +1404,20 @@ static void view3d_id_remap(ScrArea *sa, SpaceLink 
*slink, ID *old_id, ID *new_i
 {
        View3D *v3d;
        ARegion *ar;
-       RegionView3D *rv3d = NULL;
-       BGpic *bgpic;
-
-       if (sa->spacetype == SPACE_VIEW3D) {
-               for (ar = sa->regionbase.first; ar; ar = ar->next) {
-                       if (ar->regiontype == RGN_TYPE_WINDOW) {
-                               rv3d = (RegionView3D *)ar->regiondata;
-                       }
-               }
-       }
+       bool is_local = false;
 
-       for (v3d = (View3D *)slink; v3d; v3d = v3d->localvd) {
+       for (v3d = (View3D *)slink; v3d; v3d = v3d->localvd, is_local = true) {
                if ((ID *)v3d->camera == old_id) {
                        v3d->camera = (Object *)new_id;
-                       if (!new_id && rv3d && (rv3d->persp == RV3D_CAMOB)) {
-                               rv3d->persp = RV3D_PERSP;
+                       if (!new_id) {
+                               for (ar = sa->regionbase.first; ar; ar = 
ar->next) {
+                                       if (ar->regiontype == RGN_TYPE_WINDOW) {
+                                               RegionView3D *rv3d = is_local ? 
((RegionView3D *)ar->regiondata)->localvd : ar->regiondata;
+                                               if (rv3d && (rv3d->persp == 
RV3D_CAMOB)) {
+                                                       rv3d->persp = 
RV3D_PERSP;
+                                               }
+                                       }
+                               }
                        }
                }
                if ((ID *)v3d->ob_centre == old_id) {
@@ -1438,7 +1436,7 @@ static void view3d_id_remap(ScrArea *sa, SpaceLink 
*slink, ID *old_id, ID *new_i
                }
 #endif
 
-               for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
+               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);
@@ -1451,8 +1449,8 @@ static void view3d_id_remap(ScrArea *sa, SpaceLink 
*slink, ID *old_id, ID *new_i
                        }
                }
 
-               if (rv3d) {
-                       rv3d = rv3d->localvd;
+               if (is_local) {
+                       break;
                }
        }
 }

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

Reply via email to