[Bf-blender-cvs] [46a4a53824e] blender-v2.83-release: Outliner: Fix (unreported) more data-changing operators missing undo.

Bastien Montagne noreply at git.blender.org
Mon May 18 17:56:38 CEST 2020


Commit: 46a4a53824e46d3b6d61cdf6232dbde9441eaf7b
Author: Bastien Montagne
Date:   Mon May 18 17:12:53 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rB46a4a53824e46d3b6d61cdf6232dbde9441eaf7b

Outliner: Fix (unreported) more data-changing operators missing undo.

===================================================================

M	source/blender/editors/space_outliner/outliner_edit.c
M	source/blender/editors/space_outliner/outliner_tools.c

===================================================================

diff --git a/source/blender/editors/space_outliner/outliner_edit.c b/source/blender/editors/space_outliner/outliner_edit.c
index 26d356a290d..27422e5b42a 100644
--- a/source/blender/editors/space_outliner/outliner_edit.c
+++ b/source/blender/editors/space_outliner/outliner_edit.c
@@ -450,6 +450,9 @@ void OUTLINER_OT_item_rename(wmOperatorType *ot)
   ot->invoke = outliner_item_rename;
 
   ot->poll = ED_operator_outliner_active;
+
+  /* Flags. */
+  ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
 /* ID delete --------------------------------------------------- */
@@ -564,6 +567,9 @@ void OUTLINER_OT_id_delete(wmOperatorType *ot)
 
   ot->invoke = outliner_id_delete_invoke;
   ot->poll = ED_operator_outliner_active;
+
+  /* Flags. */
+  ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
 /* ID remap --------------------------------------------------- */
@@ -697,7 +703,8 @@ void OUTLINER_OT_id_remap(wmOperatorType *ot)
   ot->exec = outliner_id_remap_exec;
   ot->poll = ED_operator_outliner_active;
 
-  ot->flag = 0;
+  /* Flags. */
+  ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 
   prop = RNA_def_enum(ot->srna, "id_type", rna_enum_id_type_items, ID_OB, "ID Type", "");
   RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ID);
@@ -801,6 +808,7 @@ void OUTLINER_OT_id_copy(wmOperatorType *ot)
   ot->exec = outliner_id_copy_exec;
   ot->poll = ED_operator_outliner_active;
 
+  /* Flags, don't need any undo here (this operator does not change anything in Blender data). */
   ot->flag = 0;
 }
 
@@ -943,6 +951,9 @@ void OUTLINER_OT_lib_relocate(wmOperatorType *ot)
 
   ot->invoke = outliner_lib_relocate_invoke;
   ot->poll = ED_operator_outliner_active;
+
+  /* Flags. */
+  ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
 /* XXX This does not work with several items
@@ -991,6 +1002,9 @@ void OUTLINER_OT_lib_reload(wmOperatorType *ot)
 
   ot->invoke = outliner_lib_reload_invoke;
   ot->poll = ED_operator_outliner_active;
+
+  /* Flags. */
+  ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
 void lib_reload_cb(bContext *C,
diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c
index c162bba885f..17970e8ed64 100644
--- a/source/blender/editors/space_outliner/outliner_tools.c
+++ b/source/blender/editors/space_outliner/outliner_tools.c
@@ -1448,7 +1448,8 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
   }
   else if (event == OL_OP_REMAP) {
     outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, id_remap_cb, NULL);
-    str = "Remap ID";
+    /* No undo push here, operator does it itself (since it's a modal one, the op_undo_depth trick
+     * does not work here). */
   }
   else if (event == OL_OP_LOCALIZED) { /* disabled, see above enum (ton) */
     outliner_do_object_operation(C, op->reports, scene, soops, &soops->tree, id_local_cb);
@@ -1479,7 +1480,9 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
     ED_outliner_select_sync_from_object_tag(C);
   }
 
-  ED_undo_push(C, str);
+  if (str != NULL) {
+    ED_undo_push(C, str);
+  }
 
   return OPERATOR_FINISHED;
 }
@@ -1722,7 +1725,8 @@ static int outliner_id_operation_exec(bContext *C, wmOperator *op)
       if (idlevel > 0) {
         outliner_do_libdata_operation(
             C, op->reports, scene, soops, &soops->tree, id_remap_cb, NULL);
-        ED_undo_push(C, "Remap");
+        /* No undo push here, operator does it itself (since it's a modal one, the op_undo_depth
+         * trick does not work here). */
       }
       break;
     }
@@ -1851,7 +1855,6 @@ static int outliner_lib_operation_exec(bContext *C, wmOperator *op)
 
   switch (event) {
     case OL_LIB_RENAME: {
-      /* rename */
       outliner_do_libdata_operation(
           C, op->reports, scene, soops, &soops->tree, item_rename_cb, NULL);
 
@@ -1866,16 +1869,17 @@ static int outliner_lib_operation_exec(bContext *C, wmOperator *op)
       break;
     }
     case OL_LIB_RELOCATE: {
-      /* rename */
       outliner_do_libdata_operation(
           C, op->reports, scene, soops, &soops->tree, lib_relocate_cb, NULL);
-      ED_undo_push(C, "Relocate Library");
+      /* No undo push here, operator does it itself (since it's a modal one, the op_undo_depth
+       * trick does not work here). */
       break;
     }
     case OL_LIB_RELOAD: {
-      /* rename */
       outliner_do_libdata_operation(
           C, op->reports, scene, soops, &soops->tree, lib_reload_cb, NULL);
+      /* No undo push here, operator does it itself (since it's a modal one, the op_undo_depth
+       * trick does not work here). */
       break;
     }
     default:



More information about the Bf-blender-cvs mailing list