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
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/blender/makesrna/RNA_define.h4
-rw-r--r--source/blender/makesrna/intern/rna_define.c32
-rw-r--r--source/blender/windowmanager/intern/wm_gesture_ops.c2
3 files changed, 29 insertions, 9 deletions
diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h
index 272246d75d3..c12426ffcd0 100644
--- a/source/blender/makesrna/RNA_define.h
+++ b/source/blender/makesrna/RNA_define.h
@@ -372,7 +372,9 @@ void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item
void RNA_def_property_enum_native_type(PropertyRNA *prop, const char *native_enum_type);
void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength);
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type);
-void RNA_def_property_struct_runtime(PropertyRNA *prop, StructRNA *type);
+void RNA_def_property_struct_runtime(StructOrFunctionRNA *cont,
+ PropertyRNA *prop,
+ StructRNA *type);
void RNA_def_property_boolean_default(PropertyRNA *prop, bool value);
void RNA_def_property_boolean_array_default(PropertyRNA *prop, const bool *array);
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c
index 1b0a2fca0ce..8cc4f545ca9 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -1812,8 +1812,9 @@ void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
}
}
-void RNA_def_property_struct_runtime(PropertyRNA *prop, StructRNA *type)
+void RNA_def_property_struct_runtime(StructOrFunctionRNA *cont, PropertyRNA *prop, StructRNA *type)
{
+ /* Never valid when defined from python. */
StructRNA *srna = DefRNA.laststruct;
if (DefRNA.preprocess) {
@@ -1821,11 +1822,26 @@ void RNA_def_property_struct_runtime(PropertyRNA *prop, StructRNA *type)
return;
}
+ const bool is_id_type = (type->flag & STRUCT_ID) != 0;
+
switch (prop->type) {
case PROP_POINTER: {
PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
pprop->type = type;
+ /* Check between `cont` and `srna` is mandatory, since when defined from python
+ * `DefRNA.laststruct` is not valid.
+ * This is not an issue as bpy code already checks for this case on its own. */
+ if (cont == srna && (srna->flag & STRUCT_NO_DATABLOCK_IDPROPERTIES) != 0 && is_id_type) {
+ CLOG_ERROR(&LOG,
+ "\"%s.%s\", this struct type (probably an Operator, Keymap or UserPreference) "
+ "does not accept ID pointer properties.",
+ CONTAINER_RNA_ID(cont),
+ prop->identifier);
+ DefRNA.error = true;
+ return;
+ }
+
if (type && (type->flag & STRUCT_ID_REFCOUNT)) {
prop->flag |= PROP_ID_REFCOUNT;
}
@@ -1838,13 +1854,15 @@ void RNA_def_property_struct_runtime(PropertyRNA *prop, StructRNA *type)
break;
}
default:
- CLOG_ERROR(
- &LOG, "\"%s.%s\", invalid type for struct type.", srna->identifier, prop->identifier);
+ CLOG_ERROR(&LOG,
+ "\"%s.%s\", invalid type for struct type.",
+ CONTAINER_RNA_ID(cont),
+ prop->identifier);
DefRNA.error = true;
- break;
+ return;
}
- if ((type->flag & STRUCT_ID) != 0) {
+ if (is_id_type) {
prop->flag |= PROP_PTR_NO_OWNERSHIP;
}
}
@@ -4144,7 +4162,7 @@ PropertyRNA *RNA_def_pointer_runtime(StructOrFunctionRNA *cont_,
PropertyRNA *prop;
prop = RNA_def_property(cont, identifier, PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_runtime(prop, type);
+ RNA_def_property_struct_runtime(cont, prop, type);
if ((type->flag & STRUCT_ID) != 0) {
prop->flag |= PROP_EDITABLE;
}
@@ -4179,7 +4197,7 @@ PropertyRNA *RNA_def_collection_runtime(StructOrFunctionRNA *cont_,
PropertyRNA *prop;
prop = RNA_def_property(cont, identifier, PROP_COLLECTION, PROP_NONE);
- RNA_def_property_struct_runtime(prop, type);
+ RNA_def_property_struct_runtime(cont, prop, type);
RNA_def_property_ui_text(prop, ui_name, ui_description);
return prop;
diff --git a/source/blender/windowmanager/intern/wm_gesture_ops.c b/source/blender/windowmanager/intern/wm_gesture_ops.c
index edf9a3bc693..07d68293714 100644
--- a/source/blender/windowmanager/intern/wm_gesture_ops.c
+++ b/source/blender/windowmanager/intern/wm_gesture_ops.c
@@ -818,7 +818,7 @@ void WM_OT_lasso_gesture(wmOperatorType *ot)
ot->poll = WM_operator_winactive;
prop = RNA_def_property(ot->srna, "path", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_struct_runtime(prop, &RNA_OperatorMousePath);
+ RNA_def_property_struct_runtime(ot->srna, prop, &RNA_OperatorMousePath);
}
#endif