[Bf-blender-cvs] [21b5ce5] id-remap: Fix bad handling of RegionView3Ds in View3D ID remap callback.
Bastien Montagne
noreply at git.blender.org
Thu Jun 16 18:10:57 CEST 2016
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;
}
}
}
More information about the Bf-blender-cvs
mailing list