From bc788929aa2bd259670a5562a1f403f25cad4625 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 8 Jan 2021 16:30:44 +0100 Subject: Scenes: forbid deleting last local scene Previously, it was only forbidden to delete the last scene. This can lead to the situation where a .blend file only contains linked scenes. This is problematic, because linked data might not always be available or can be removed from a .blend file without having an additional check for remaining scenes. Now there always has to be at least one local scene. Reviewers: mont29 Differential Revision: https://developer.blender.org/D10049 --- source/blender/blenkernel/intern/scene.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'source/blender/blenkernel/intern/scene.c') diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index adc50c2247b..11cdf67cb82 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -2032,6 +2032,21 @@ void BKE_scene_groups_relink(Scene *sce) } } +bool BKE_scene_can_be_removed(const Main *bmain, const Scene *scene) +{ + /* Linked scenes can always be removed. */ + if (ID_IS_LINKED(scene)) { + return true; + } + /* Local scenes can only be removed, when there is at least one local scene left. */ + LISTBASE_FOREACH (Scene *, other_scene, &bmain->scenes) { + if (other_scene != scene && !ID_IS_LINKED(other_scene)) { + return true; + } + } + return false; +} + Scene *BKE_scene_add(Main *bmain, const char *name) { Scene *sce; -- cgit v1.2.3