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:
authorBastien Montagne <montagne29@wanadoo.fr>2019-08-13 13:56:27 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2019-08-13 16:37:11 +0300
commit03bf84db86bc023cfad501b1b4764cecb6435422 (patch)
tree6745f3914466f745d104e937d46a94b5ef7fe9e5 /source/blender/makesrna
parent6f9cbbc8ec4f42131f46d3d25e7608112bcb7eab (diff)
Fix T66373: Strange translation text behaviour.
i18n code does not work from threads on some plaforms, so it is disabled in Blender when called from non-main thread. Means that we have to go to a slightly different approach, with dirty tag and generating string on request for UI. Note: Also had to update the `info` string size, to fit with expensive asiatic scripts in utf-8... Using mem for that kind of runtime data is not really nice, but for now it will have to do.
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r--source/blender/makesrna/intern/rna_object_force.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c
index ab6cffe615d..066e350ab3e 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -140,7 +140,7 @@ static void rna_Cache_change(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
if (pid.type == PTCACHE_TYPE_SMOKE_DOMAIN) {
cache->step = 1;
}
- BKE_ptcache_update_info(&pid);
+ cache->flag |= PTCACHE_FLAG_INFO_DIRTY;
}
}
@@ -292,6 +292,24 @@ static void rna_PointCache_frame_step_range(
}
}
+int rna_Cache_info_length(PointerRNA *ptr)
+{
+ PointCache *cache = (PointCache *)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+
+ if (!ob) {
+ return 0;
+ }
+
+ PTCacheID pid = BKE_ptcache_id_find(ob, NULL, cache);
+
+ if (cache->flag & PTCACHE_FLAG_INFO_DIRTY) {
+ BKE_ptcache_update_info(&pid);
+ }
+
+ return (int)strlen(cache->info);
+}
+
static char *rna_CollisionSettings_path(PointerRNA *UNUSED(ptr))
{
/* both methods work ok, but return the shorter path */
@@ -870,6 +888,11 @@ static void rna_def_pointcache_common(StructRNA *srna)
prop = RNA_def_property(srna, "info", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "info");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ /* Note that we do not actually need a getter here, `rna_Cache_info_length` will upate the info
+ * string just as well. */
+ RNA_def_property_string_funcs(prop, NULL, "rna_Cache_info_length", NULL);
+ RNA_def_property_string_maxlength(
+ prop, sizeof(((PointCache *)0)->info) / sizeof(*(((PointCache *)0)->info)));
RNA_def_property_ui_text(prop, "Cache Info", "Info on current cache status");
prop = RNA_def_property(srna, "use_external", PROP_BOOLEAN, PROP_NONE);