Initial step for IDTypeInfo refactor 'cleanup' project.
[blender.git] / source / blender / blenkernel / intern / lib_id_delete.c
index fcca12a564a48397e6bee4fa3783ffb6c2c521fc..d47510ea9af55bbff0a98148b1d58998440901f5 100644 (file)
  * Contains management of ID's for freeing & deletion.
  */
 
-#include "CLG_log.h"
-
 #include "MEM_guardedalloc.h"
 
 /* all types are needed here, in order to do memory operations */
-#include "DNA_anim_types.h"
 #include "DNA_armature_types.h"
 #include "DNA_brush_types.h"
 #include "DNA_camera_types.h"
 #include "BKE_cachefile.h"
 #include "BKE_collection.h"
 #include "BKE_curve.h"
-#include "BKE_fcurve.h"
 #include "BKE_font.h"
 #include "BKE_gpencil.h"
 #include "BKE_idprop.h"
+#include "BKE_idtype.h"
 #include "BKE_image.h"
 #include "BKE_ipo.h"
 #include "BKE_key.h"
@@ -78,6 +75,7 @@
 #include "BKE_lib_id.h"
 #include "BKE_lib_override.h"
 #include "BKE_lib_remap.h"
+#include "BKE_library.h"
 #include "BKE_linestyle.h"
 #include "BKE_mesh.h"
 #include "BKE_material.h"
@@ -118,7 +116,7 @@ void BKE_libblock_free_data(ID *id, const bool do_id_user)
   }
 
   if (id->override_library) {
-    BKE_override_library_free(&id->override_library, do_id_user);
+    BKE_lib_override_library_free(&id->override_library, do_id_user);
   }
 
   /* XXX TODO remove animdata handling from each type's freeing func,
@@ -127,6 +125,15 @@ void BKE_libblock_free_data(ID *id, const bool do_id_user)
 
 void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag))
 {
+  const IDTypeInfo *idtype_info = BKE_idtype_get_info_from_id(id);
+
+  if (idtype_info != NULL) {
+    if (idtype_info->free_data != NULL) {
+      idtype_info->free_data(id);
+    }
+    return;
+  }
+
   const short type = GS(id->name);
   switch (type) {
     case ID_SCE: