Python API: assume that a crashed Python operator returned FINISHED.
authorAlexander Gavrilov <angavrilov@gmail.com>
Wed, 13 Nov 2019 10:42:01 +0000 (13:42 +0300)
committerAlexander Gavrilov <angavrilov@gmail.com>
Mon, 18 Nov 2019 19:03:40 +0000 (22:03 +0300)
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

source/blender/makesrna/intern/rna_wm.c
source/blender/makesrna/intern/rna_wm_api.c
source/blender/makesrna/intern/rna_wm_gizmo.c

index 5f60ecf449ba37200716471a86a4ee5edb5a4ae5..8e68495dd78c9161ed77cf31343970b4c341cce8 100644 (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)"},
index 1330250edab310cf1691dff4b90212df4bc52879..841d82adcb7f42fb1b27e11fa73116363598d74c 100644 (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 */
index ba26929d80835e40e08d1fe338be6fb3775f1764..0bd6769d3ad369b54e329674fbc9235f21b44f59 100644 (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 */