diff options
author | Bastien Montagne <bastien@blender.org> | 2020-04-21 19:29:25 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2020-04-21 19:29:25 +0300 |
commit | 8845b27dce8908de398cd7b0e0d08fb4be90e005 (patch) | |
tree | be3140b084d3d02ac29a93b5b5edb407a066fffe /source/blender/blenkernel/intern/blendfile.c | |
parent | 93e193399d9432f2334deb77a93c41b82b1ef4e7 (diff) | |
parent | bc3aab3fa547e60d2361d5a50cdc79885bdc7355 (diff) |
Merge branch 'blender-v2.83-release'
Diffstat (limited to 'source/blender/blenkernel/intern/blendfile.c')
-rw-r--r-- | source/blender/blenkernel/intern/blendfile.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c index 0d5d35e3508..13dcc7b06f6 100644 --- a/source/blender/blenkernel/intern/blendfile.c +++ b/source/blender/blenkernel/intern/blendfile.c @@ -201,6 +201,27 @@ static void setup_app_data(bContext *C, SWAP(ListBase, bmain->workspaces, bfd->main->workspaces); SWAP(ListBase, bmain->screens, bfd->main->screens); + /* In case of actual new file reading without loading UI, we need to regenerate the session + * uuid of the UI-related datablocks we are keeping from previous session, otherwise their uuid + * will collide with some generated for newly read data. */ + if (mode != LOAD_UNDO) { + ID *id; + FOREACH_MAIN_LISTBASE_ID_BEGIN (&bfd->main->wm, id) { + BKE_lib_libblock_session_uuid_renew(id); + } + FOREACH_MAIN_LISTBASE_ID_END; + + FOREACH_MAIN_LISTBASE_ID_BEGIN (&bfd->main->workspaces, id) { + BKE_lib_libblock_session_uuid_renew(id); + } + FOREACH_MAIN_LISTBASE_ID_END; + + FOREACH_MAIN_LISTBASE_ID_BEGIN (&bfd->main->screens, id) { + BKE_lib_libblock_session_uuid_renew(id); + } + FOREACH_MAIN_LISTBASE_ID_END; + } + /* we re-use current window and screen */ win = CTX_wm_window(C); curscreen = CTX_wm_screen(C); |