Python API: assume that a crashed Python operator returned FINISHED.

The CANCELLED return value from an operator is intended for
signaling that the operator aborted execution without changing
anything, and an Undo stack entry should not be created.

When a Python operator crashes, it is not safe to assume that
it did nothing, so it should interpret it as FINISHED instead.
Otherwise, the undo system behavior after an operator failure
feels broken.

Differential Revision: https://developer.blender.org/D6241
This commit is contained in:
Alexander Gavrilov 2019-11-13 13:42:01 +03:00
parent 64c27b9690
commit 04272613a7
3 changed files with 8 additions and 8 deletions

View File

@ -469,12 +469,12 @@ const EnumPropertyItem rna_enum_operator_return_items[] = {
"CANCELLED",
0,
"Cancelled",
"When no action has been taken, operator exits"},
"The operator exited without doing anything, so no undo entry should be pushed"},
{OPERATOR_FINISHED,
"FINISHED",
0,
"Finished",
"When the operator is complete, operator exits"},
"The operator exited after completing its action"},
/* used as a flag */
{OPERATOR_PASS_THROUGH, "PASS_THROUGH", 0, "Pass Through", "Do nothing and pass the event on"},
{OPERATOR_INTERFACE, "INTERFACE", 0, "Interface", "Handled but not executed (popup menus)"},

View File

@ -639,7 +639,7 @@ static void rna_generic_op_invoke(FunctionRNA *func, int flag)
if (flag & WM_GEN_INVOKE_RETURN) {
parm = RNA_def_enum_flag(
func, "result", rna_enum_operator_return_items, OPERATOR_CANCELLED, "result", "");
func, "result", rna_enum_operator_return_items, OPERATOR_FINISHED, "result", "");
RNA_def_function_return(func, parm);
}
}
@ -914,7 +914,7 @@ void RNA_api_operator(StructRNA *srna)
/* better name? */
parm = RNA_def_enum_flag(
func, "result", rna_enum_operator_return_items, OPERATOR_CANCELLED, "result", "");
func, "result", rna_enum_operator_return_items, OPERATOR_FINISHED, "result", "");
RNA_def_function_return(func, parm);
/* check */
@ -939,7 +939,7 @@ void RNA_api_operator(StructRNA *srna)
/* better name? */
parm = RNA_def_enum_flag(
func, "result", rna_enum_operator_return_items, OPERATOR_CANCELLED, "result", "");
func, "result", rna_enum_operator_return_items, OPERATOR_FINISHED, "result", "");
RNA_def_function_return(func, parm);
func = RNA_def_function(srna, "modal", NULL); /* same as invoke */
@ -952,7 +952,7 @@ void RNA_api_operator(StructRNA *srna)
/* better name? */
parm = RNA_def_enum_flag(
func, "result", rna_enum_operator_return_items, OPERATOR_CANCELLED, "result", "");
func, "result", rna_enum_operator_return_items, OPERATOR_FINISHED, "result", "");
RNA_def_function_return(func, parm);
/* draw */

View File

@ -1073,7 +1073,7 @@ static void rna_def_gizmo(BlenderRNA *brna, PropertyRNA *cprop)
parm = RNA_def_enum_flag(func, "tweak", tweak_actions, 0, "Tweak", "");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
parm = RNA_def_enum_flag(
func, "result", rna_enum_operator_return_items, OPERATOR_CANCELLED, "result", "");
func, "result", rna_enum_operator_return_items, OPERATOR_FINISHED, "result", "");
RNA_def_function_return(func, parm);
/* wmGizmo.property_update */
/* TODO */
@ -1092,7 +1092,7 @@ static void rna_def_gizmo(BlenderRNA *brna, PropertyRNA *cprop)
parm = RNA_def_pointer(func, "event", "Event", "", "");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
parm = RNA_def_enum_flag(
func, "result", rna_enum_operator_return_items, OPERATOR_CANCELLED, "result", "");
func, "result", rna_enum_operator_return_items, OPERATOR_FINISHED, "result", "");
RNA_def_function_return(func, parm);
/* wmGizmo.exit */