Merge branch 'master' into blender2.8
[blender.git] / source / blender / blenkernel / intern / library_remap.c
index be16e7ce448db370e6a3086c11259a680c9bfe91..a5e8e41e738a2f99954b42dde0306beb4649e728 100644 (file)
@@ -759,30 +759,9 @@ void BKE_libblock_free_data(Main *UNUSED(bmain), ID *id, const bool do_id_user)
        }
 }
 
-/**
- * used in headerbuttons.c image.c mesh.c screen.c sound.c and library.c
- *
- * \param do_id_user: if \a true, try to release other ID's 'references' hold by \a idv.
- *                    (only applies to main database)
- * \param do_ui_user: similar to do_id_user but makes sure UI does not hold references to
- *                    \a id.
- */
-void BKE_libblock_free_ex(Main *bmain, void *idv, const bool do_id_user, const bool do_ui_user)
+void BKE_libblock_free_datablock(ID *id)
 {
-       ID *id = idv;
-       short type = GS(id->name);
-       ListBase *lb = which_libbase(bmain, type);
-
-       DEG_id_type_tag(bmain, type);
-
-#ifdef WITH_PYTHON
-       BPY_id_release(id);
-#endif
-
-       if (do_id_user) {
-               BKE_libblock_relink_ex(bmain, id, NULL, NULL, true);
-       }
-
+       const short type = GS(id->name);
        switch (type) {
                case ID_SCE:
                        BKE_scene_free((Scene *)id);
@@ -894,6 +873,33 @@ void BKE_libblock_free_ex(Main *bmain, void *idv, const bool do_id_user, const b
                        BKE_workspace_free((WorkSpace *)id);
                        break;
        }
+}
+
+/**
+ * used in headerbuttons.c image.c mesh.c screen.c sound.c and library.c
+ *
+ * \param do_id_user: if \a true, try to release other ID's 'references' hold by \a idv.
+ *                    (only applies to main database)
+ * \param do_ui_user: similar to do_id_user but makes sure UI does not hold references to
+ *                    \a id.
+ */
+void BKE_libblock_free_ex(Main *bmain, void *idv, const bool do_id_user, const bool do_ui_user)
+{
+       ID *id = idv;
+       short type = GS(id->name);
+       ListBase *lb = which_libbase(bmain, type);
+
+       DEG_id_type_tag(bmain, type);
+
+#ifdef WITH_PYTHON
+       BPY_id_release(id);
+#endif
+
+       if (do_id_user) {
+               BKE_libblock_relink_ex(bmain, id, NULL, NULL, true);
+       }
+
+       BKE_libblock_free_datablock(id);
 
        /* avoid notifying on removed data */
        BKE_main_lock(bmain);