BPY/RNA: determine callback functions that are allowed to write data by a flag
on the function instead of checking the name.
This commit is contained in:
@@ -313,6 +313,7 @@ typedef enum FunctionFlag {
|
|||||||
FUNC_USE_CONTEXT = 4,
|
FUNC_USE_CONTEXT = 4,
|
||||||
FUNC_USE_REPORTS = 8,
|
FUNC_USE_REPORTS = 8,
|
||||||
FUNC_USE_SELF_ID = 2048,
|
FUNC_USE_SELF_ID = 2048,
|
||||||
|
FUNC_ALLOW_WRITE = 4096,
|
||||||
|
|
||||||
/* registering */
|
/* registering */
|
||||||
FUNC_REGISTER = 16,
|
FUNC_REGISTER = 16,
|
||||||
|
@@ -316,7 +316,7 @@ void RNA_api_operator(StructRNA *srna)
|
|||||||
/* exec */
|
/* exec */
|
||||||
func = RNA_def_function(srna, "execute", NULL);
|
func = RNA_def_function(srna, "execute", NULL);
|
||||||
RNA_def_function_ui_description(func, "Execute the operator");
|
RNA_def_function_ui_description(func, "Execute the operator");
|
||||||
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
|
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
|
||||||
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
||||||
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
||||||
|
|
||||||
@@ -327,7 +327,7 @@ void RNA_api_operator(StructRNA *srna)
|
|||||||
/* check */
|
/* check */
|
||||||
func = RNA_def_function(srna, "check", NULL);
|
func = RNA_def_function(srna, "check", NULL);
|
||||||
RNA_def_function_ui_description(func, "Check the operator settings, return True to signal a change to redraw");
|
RNA_def_function_ui_description(func, "Check the operator settings, return True to signal a change to redraw");
|
||||||
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
|
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
|
||||||
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
||||||
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
||||||
|
|
||||||
@@ -337,7 +337,7 @@ void RNA_api_operator(StructRNA *srna)
|
|||||||
/* invoke */
|
/* invoke */
|
||||||
func = RNA_def_function(srna, "invoke", NULL);
|
func = RNA_def_function(srna, "invoke", NULL);
|
||||||
RNA_def_function_ui_description(func, "Invoke the operator");
|
RNA_def_function_ui_description(func, "Invoke the operator");
|
||||||
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
|
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
|
||||||
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
||||||
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
||||||
parm = RNA_def_pointer(func, "event", "Event", "", "");
|
parm = RNA_def_pointer(func, "event", "Event", "", "");
|
||||||
@@ -349,7 +349,7 @@ void RNA_api_operator(StructRNA *srna)
|
|||||||
|
|
||||||
func = RNA_def_function(srna, "modal", NULL); /* same as invoke */
|
func = RNA_def_function(srna, "modal", NULL); /* same as invoke */
|
||||||
RNA_def_function_ui_description(func, "Modal operator function");
|
RNA_def_function_ui_description(func, "Modal operator function");
|
||||||
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
|
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
|
||||||
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
||||||
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
||||||
parm = RNA_def_pointer(func, "event", "Event", "", "");
|
parm = RNA_def_pointer(func, "event", "Event", "", "");
|
||||||
@@ -369,7 +369,7 @@ void RNA_api_operator(StructRNA *srna)
|
|||||||
/* cancel */
|
/* cancel */
|
||||||
func = RNA_def_function(srna, "cancel", NULL);
|
func = RNA_def_function(srna, "cancel", NULL);
|
||||||
RNA_def_function_ui_description(func, "Called when the operator is canceled");
|
RNA_def_function_ui_description(func, "Called when the operator is canceled");
|
||||||
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
|
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
|
||||||
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
||||||
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
||||||
|
|
||||||
|
@@ -6953,9 +6953,7 @@ static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, Param
|
|||||||
const int is_operator = RNA_struct_is_a(ptr->type, &RNA_Operator);
|
const int is_operator = RNA_struct_is_a(ptr->type, &RNA_Operator);
|
||||||
const char *func_id = RNA_function_identifier(func);
|
const char *func_id = RNA_function_identifier(func);
|
||||||
/* testing, for correctness, not operator and not draw function */
|
/* testing, for correctness, not operator and not draw function */
|
||||||
const short is_readonly = ((strncmp("draw", func_id, 4) == 0) || /* draw or draw_header */
|
const short is_readonly = !(RNA_function_flag(func) & FUNC_ALLOW_WRITE);
|
||||||
/*strstr("render", func_id) ||*/
|
|
||||||
!is_operator);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
py_class = RNA_struct_py_type_get(ptr->type);
|
py_class = RNA_struct_py_type_get(ptr->type);
|
||||||
|
Reference in New Issue
Block a user