diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-09-24 01:55:56 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-09-24 01:55:56 +0400 |
commit | fb591ea9131548bdb9b29c4e353eba8ea5deb1bb (patch) | |
tree | 846d04d278d9e05148fc16a36f92a4463341f175 /source/blender | |
parent | fc2dbc20ff5c9187310e8d51dca99c7be13b84b4 (diff) |
Fix #36793: missing update on undo with proxy object that is not using a proxy group.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/depsgraph.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 15 |
2 files changed, 9 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 13181662bd8..cb7b4a32feb 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -2115,6 +2115,8 @@ void DAG_on_visible_update(Main *bmain, const short do_time) if ((oblay & lay) & ~scene->lay_updated) { if (ELEM6(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL, OB_LATTICE)) ob->recalc |= OB_RECALC_DATA; + if (ob->proxy && (ob->proxy_group == NULL)) + ob->proxy->recalc |= OB_RECALC_DATA; if (ob->dup_group) dag_group_on_visible_update(ob->dup_group); } diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index d7abdbdea0a..5d0216affca 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -2835,21 +2835,20 @@ void BKE_object_handle_update_ex(Scene *scene, Object *ob, /* quick cache removed */ } - /* the no-group proxy case, we call update */ - if (ob->proxy && ob->proxy_group == NULL) { - /* set pointer in library proxy target, for copying, but restore it */ - ob->proxy->proxy_from = ob; - // printf("call update, lib ob %s proxy %s\n", ob->proxy->id.name, ob->id.name); - BKE_object_handle_update(scene, ob->proxy); - } - ob->recalc &= ~OB_RECALC_ALL; } /* the case when this is a group proxy, object_update is called in group.c */ if (ob->proxy) { + /* set pointer in library proxy target, for copying, but restore it */ ob->proxy->proxy_from = ob; // printf("set proxy pointer for later group stuff %s\n", ob->id.name); + + /* the no-group proxy case, we call update */ + if (ob->proxy_group == NULL) { + // printf("call update, lib ob %s proxy %s\n", ob->proxy->id.name, ob->id.name); + BKE_object_handle_update(scene, ob->proxy); + } } } /* WARNING: "scene" here may not be the scene object actually resides in. |