Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-05-15 09:53:43 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-05-15 10:42:01 +0300
commit6a850f3cc840a574d3b5b5af7b608ae3536f96ec (patch)
tree7427864cc1fa2201619f34da5564f1d4a4181f10 /source/blender/blenloader
parentc361f911f9c459364fceea5de5b9d0ea2f91c9e9 (diff)
Fix duplicate ID's being created when appending/linking
This removes grease pencil brush creation/dat-block delete on load, since this causes duplicate data-blocks. Add assert to prevent this happening in the future since the error is isn't obvious.
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r--source/blender/blenloader/intern/readfile.c10
-rw-r--r--source/blender/blenloader/intern/versioning_280.c21
2 files changed, 14 insertions, 17 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index cb567147224..f60250bf7fd 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -9909,6 +9909,9 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
{
/* WATCH IT!!!: pointers from libdata have not been converted */
+ /* Don't allow versioning to create new data-blocks. */
+ main->is_locked_for_linking = true;
+
if (G.debug & G_DEBUG) {
char build_commit_datetime[32];
time_t temp_time = main->build_commit_timestamp;
@@ -9939,6 +9942,8 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/* WATCH IT 2!: Userdef struct init see do_versions_userdef() above! */
/* don't forget to set version number in BKE_blender_version.h! */
+
+ main->is_locked_for_linking = false;
}
static void do_versions_after_linking(Main *main, ReportList *reports)
@@ -9946,11 +9951,16 @@ static void do_versions_after_linking(Main *main, ReportList *reports)
// printf("%s for %s (%s), %d.%d\n", __func__, main->curlib ? main->curlib->name : main->name,
// main->curlib ? "LIB" : "MAIN", main->versionfile, main->subversionfile);
+ /* Don't allow versioning to create new data-blocks. */
+ main->is_locked_for_linking = true;
+
do_versions_after_linking_250(main);
do_versions_after_linking_260(main);
do_versions_after_linking_270(main);
do_versions_after_linking_280(main, reports);
do_versions_after_linking_cycles(main);
+
+ main->is_locked_for_linking = false;
}
/** \} */
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index df6d1ee3c46..2c4cc544e2a 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -159,6 +159,8 @@ static bScreen *screen_parent_find(const bScreen *screen)
static void do_version_workspaces_create_from_screens(Main *bmain)
{
+ bmain->is_locked_for_linking = false;
+
for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
const bScreen *screen_parent = screen_parent_find(screen);
WorkSpace *workspace;
@@ -180,6 +182,8 @@ static void do_version_workspaces_create_from_screens(Main *bmain)
}
BKE_workspace_layout_add(bmain, workspace, screen, screen->id.name + 2);
}
+
+ bmain->is_locked_for_linking = true;
}
static void do_version_area_change_space_to_space_action(ScrArea *area, const Scene *scene)
@@ -1694,21 +1698,11 @@ void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports))
rename_id_for_versioning(bmain, ID_MA, "Black Dots", "Dots Stroke");
}
- /* Remove useless Fill Area.001 brush. */
- brush = BLI_findstring(&bmain->brushes, "Fill Area.001", offsetof(ID, name) + 2);
- if (brush) {
- BKE_id_delete(bmain, brush);
- }
-
brush = BLI_findstring(&bmain->brushes, "Pencil", offsetof(ID, name) + 2);
for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
ToolSettings *ts = scene->toolsettings;
- BKE_brush_gpencil_vertex_presets(bmain, ts);
- BKE_brush_gpencil_sculpt_presets(bmain, ts);
- BKE_brush_gpencil_weight_presets(bmain, ts);
-
/* Ensure new Paint modes. */
BKE_paint_ensure_from_paintmode(scene, PAINT_MODE_GPENCIL);
BKE_paint_ensure_from_paintmode(scene, PAINT_MODE_VERTEX_GPENCIL);
@@ -1722,8 +1716,6 @@ void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports))
/* Enable cursor by default. */
paint->flags |= PAINT_SHOW_BRUSH;
}
- /* Ensure Palette by default. */
- BKE_gpencil_palette_ensure(bmain, scene);
}
}
@@ -1737,11 +1729,6 @@ void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports))
/* Reset all grease pencil brushes. */
LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
- BKE_brush_gpencil_paint_presets(bmain, scene->toolsettings);
- BKE_brush_gpencil_sculpt_presets(bmain, scene->toolsettings);
- BKE_brush_gpencil_weight_presets(bmain, scene->toolsettings);
- BKE_brush_gpencil_vertex_presets(bmain, scene->toolsettings);
-
/* Ensure new Paint modes. */
BKE_paint_ensure_from_paintmode(scene, PAINT_MODE_VERTEX_GPENCIL);
BKE_paint_ensure_from_paintmode(scene, PAINT_MODE_SCULPT_GPENCIL);