Fix T64764: 'Reload' on linked libraries disconnects proxy armature datablocks.
authorBastien Montagne <montagne29@wanadoo.fr>
Wed, 22 May 2019 07:23:17 +0000 (09:23 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Wed, 22 May 2019 21:33:27 +0000 (23:33 +0200)
Note that this only fixes the core issue reported (caused by own dummy
mistake in rBd0df7fb3b94ea), investigating that report uncovered at leat
two more issues, including a crasher (when reloading after an undo)...

source/blender/blenkernel/intern/library_query.c
source/blender/windowmanager/intern/wm_files_link.c

index a95069a..085051f 100644 (file)
@@ -591,7 +591,7 @@ static void library_foreach_ID_link(Main *bmain,
         CALLBACK_INVOKE(object->parent, IDWALK_CB_NEVER_SELF);
         CALLBACK_INVOKE(object->track, IDWALK_CB_NEVER_SELF);
         /* object->proxy is refcounted, but not object->proxy_group... *sigh* */
-        CALLBACK_INVOKE(object->proxy, IDWALK_CB_NEVER_SELF);
+        CALLBACK_INVOKE(object->proxy, IDWALK_CB_USER | IDWALK_CB_NEVER_SELF);
         CALLBACK_INVOKE(object->proxy_group, IDWALK_CB_NOP);
 
         /* Special case!
index 0cb3e5e..1a46a45 100644 (file)
@@ -729,7 +729,10 @@ static void lib_relocate_do(Main *bmain,
     }
     if (new_id) {
 #ifdef PRINT_DEBUG
-      printf("before remap, old_id users: %d, new_id users: %d\n", old_id->us, new_id->us);
+      printf("before remap of %s, old_id users: %d, new_id users: %d\n",
+             old_id->name,
+             old_id->us,
+             new_id->us);
 #endif
       BKE_libblock_remap_locked(bmain, old_id, new_id, remap_flags);
 
@@ -739,7 +742,10 @@ static void lib_relocate_do(Main *bmain,
       }
 
 #ifdef PRINT_DEBUG
-      printf("after remap, old_id users: %d, new_id users: %d\n", old_id->us, new_id->us);
+      printf("after remap of %s, old_id users: %d, new_id users: %d\n",
+             old_id->name,
+             old_id->us,
+             new_id->us);
 #endif
 
       /* In some cases, new_id might become direct link, remove parent of library in this case. */