diff options
author | Bastien Montagne <bastien@blender.org> | 2020-11-23 13:56:40 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2020-11-23 13:56:40 +0300 |
commit | 64513df8b63a73ddea9015aa133d321fe1f062b0 (patch) | |
tree | fd8efd6f46428243c8b7918f63e4ed109c51eb18 /source/blender | |
parent | 401612b8e148c3533f61a170c5189cf3d50e7bc1 (diff) |
Fix T82849: Assert When Unlinking "Edit Source" Text Data-block.
Simplify and sanitize handling of usercounts for Text IDs generated
trhough `BKE_text_load_ex`.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/text.c | 12 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_ops.c | 1 | ||||
-rw-r--r-- | source/blender/editors/space_text/text_ops.c | 2 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_main_api.c | 2 |
4 files changed, 11 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c index 6f4ac4c44a0..93795af7cd7 100644 --- a/source/blender/blenkernel/intern/text.c +++ b/source/blender/blenkernel/intern/text.c @@ -459,6 +459,12 @@ bool BKE_text_reload(Text *text) return true; } +/** Load a text file. + * + * \param is_internal If \a true, this text data-block only exists in memory, not as a file on + * disk. + * + * \note: text data-blocks have no user by default, only the 'real user' flag. */ Text *BKE_text_load_ex(Main *bmain, const char *file, const char *relpath, const bool is_internal) { unsigned char *buffer; @@ -478,8 +484,9 @@ Text *BKE_text_load_ex(Main *bmain, const char *file, const char *relpath, const } ta = BKE_libblock_alloc(bmain, ID_TXT, BLI_path_basename(filepath_abs), 0); - /* Texts always have 'real' user (see also read code). */ + /* Texts have no user by default... Only the 'real' user flag. */ id_us_ensure_real(&ta->id); + id_us_min(&ta->id); BLI_listbase_clear(&ta->lines); ta->curl = ta->sell = NULL; @@ -511,6 +518,9 @@ Text *BKE_text_load_ex(Main *bmain, const char *file, const char *relpath, const return ta; } +/** Load a text file. + * + * \note: text data-blocks have no user by default, only the 'real user' flag. */ Text *BKE_text_load(Main *bmain, const char *file, const char *relpath) { return BKE_text_load_ex(bmain, file, relpath, false); diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c index 2b91d1b273d..0d1e2802242 100644 --- a/source/blender/editors/interface/interface_ops.c +++ b/source/blender/editors/interface/interface_ops.c @@ -1316,7 +1316,6 @@ static int editsource_text_edit(bContext *C, if (text == NULL) { text = BKE_text_load(bmain, filepath, BKE_main_blendfile_path(bmain)); - id_us_ensure_real(&text->id); } if (text == NULL) { diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index 52a5ff609d8..f8b7c62686f 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -338,8 +338,6 @@ static int text_open_exec(bContext *C, wmOperator *op) RNA_string_get(op->ptr, "filepath", str); text = BKE_text_load_ex(bmain, str, BKE_main_blendfile_path(bmain), internal); - /* Texts have no user by default... Only the 'real' user flag. */ - id_us_min(&text->id); if (!text) { if (op->customdata) { diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c index d2381ac7577..21ff44ed253 100644 --- a/source/blender/makesrna/intern/rna_main_api.c +++ b/source/blender/makesrna/intern/rna_main_api.c @@ -543,8 +543,6 @@ static Text *rna_Main_texts_load(Main *bmain, errno = 0; txt = BKE_text_load_ex(bmain, filepath, BKE_main_blendfile_path(bmain), is_internal); - /* Texts have no user by default... Only the 'real' user flag. */ - id_us_min(&txt->id); if (!txt) { BKE_reportf(reports, |