[Bf-blender-cvs] [2f834bfc148] master: Fix T97559: Undoing of NLA strip duplication requires two undo steps

Colin Basnett noreply at git.blender.org
Tue Jul 19 16:07:57 CEST 2022


Commit: 2f834bfc14824c224f99ab7d9a9e561fa86aef6b
Author: Colin Basnett
Date:   Tue Jul 19 16:06:00 2022 +0200
Branches: master
https://developer.blender.org/rB2f834bfc14824c224f99ab7d9a9e561fa86aef6b

Fix T97559: Undoing of NLA strip duplication requires two undo steps

Fix the issue where undoing a "duplicate NLA strip" operation would
require two undo steps.

The cause of this was that the operator was not using the operator macro
system to combine both the duplication and the translate operators into
one. Instead, the old code was simply manually invoking invoking the
translate operator after the duplicate operator had completed.

This patch requires the default keymap to be modified to include the two
new macro operators, `NLA_OT_duplicate_move` and
`NLA_OT_duplicate_linked_move` in favour of the old keymap that simply
called `NLA_OT_duplicate` and passed along a `linked` argument.

`duplicate_move` and `duplicate_move_linked` are two different enough
operations to justify having their own operators from user's
point-of-view, especially since we cannot yet have different tool-tips
based on an operator's settings.

Reviewed By: sybren, mont29

Differential Revision: https://developer.blender.org/D15086

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	source/blender/editors/include/ED_anim_api.h
M	source/blender/editors/space_api/spacetypes.c
M	source/blender/editors/space_nla/nla_edit.c
M	source/blender/editors/space_nla/nla_ops.c

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index e1e88a0e48d..d08efc6909b 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -2578,10 +2578,8 @@ def km_nla_editor(params):
         ("nla.soundclip_add", {"type": 'K', "value": 'PRESS', "shift": True}, None),
         ("nla.meta_add", {"type": 'G', "value": 'PRESS', "ctrl": True}, None),
         ("nla.meta_remove", {"type": 'G', "value": 'PRESS', "ctrl": True, "alt": True}, None),
-        ("nla.duplicate", {"type": 'D', "value": 'PRESS', "shift": True},
-         {"properties": [("linked", False)]}),
-        ("nla.duplicate", {"type": 'D', "value": 'PRESS', "alt": True},
-         {"properties": [("linked", True)]}),
+        ("nla.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None),
+        ("nla.duplicate_linked_move", {"type": 'D', "value": 'PRESS', "alt": True}, None),
         ("nla.make_single_user", {"type": 'U', "value": 'PRESS'}, None),
         ("nla.delete", {"type": 'X', "value": 'PRESS'}, None),
         ("nla.delete", {"type": 'DEL', "value": 'PRESS'}, None),
diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h
index ac3b4133007..cc3c68abc55 100644
--- a/source/blender/editors/include/ED_anim_api.h
+++ b/source/blender/editors/include/ED_anim_api.h
@@ -1046,6 +1046,8 @@ void ED_keymap_anim(struct wmKeyConfig *keyconf);
 void ED_operatormacros_graph(void);
 /* space_action */
 void ED_operatormacros_action(void);
+/* space_nla*/
+void ED_operatormacros_nla(void);
 
 /** \} */
 
diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c
index d53fe2efb03..3d964a95bc0 100644
--- a/source/blender/editors/space_api/spacetypes.c
+++ b/source/blender/editors/space_api/spacetypes.c
@@ -163,6 +163,7 @@ void ED_spacemacros_init(void)
   ED_operatormacros_sequencer();
   ED_operatormacros_paint();
   ED_operatormacros_gpencil();
+  ED_operatormacros_nla();
 
   /* Register dropboxes (can use macros). */
   ED_dropboxes_ui();
diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c
index d1a667c6e4e..801d032a861 100644
--- a/source/blender/editors/space_nla/nla_edit.c
+++ b/source/blender/editors/space_nla/nla_edit.c
@@ -1216,13 +1216,10 @@ static int nlaedit_duplicate_exec(bContext *C, wmOperator *op)
   return OPERATOR_CANCELLED;
 }
 
-static int nlaedit_duplicate_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+static int nlaedit_duplicate_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
 {
   nlaedit_duplicate_exec(C, op);
 
-  RNA_enum_set(op->ptr, "mode", TFM_TRANSLATION);
-  WM_operator_name_call(C, "TRANSFORM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr, event);
-
   return OPERATOR_FINISHED;
 }
 
@@ -1248,9 +1245,6 @@ void NLA_OT_duplicate(wmOperatorType *ot)
                              false,
                              "Linked",
                              "When duplicating strips, assign new copies of the actions they use");
-
-  /* to give to transform */
-  RNA_def_enum(ot->srna, "mode", rna_enum_transform_mode_types, TFM_TRANSLATION, "Mode", "");
 }
 
 /** \} */
diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c
index 902e7a176a3..3ae73282230 100644
--- a/source/blender/editors/space_nla/nla_ops.c
+++ b/source/blender/editors/space_nla/nla_ops.c
@@ -16,6 +16,8 @@
 #include "ED_anim_api.h"
 #include "ED_screen.h"
 
+#include "RNA_access.h"
+
 #include "WM_api.h"
 #include "WM_types.h"
 
@@ -138,6 +140,28 @@ void nla_operatortypes(void)
   WM_operatortype_append(NLA_OT_fmodifier_paste);
 }
 
+void ED_operatormacros_nla()
+{
+  wmOperatorType *ot;
+  wmOperatorTypeMacro *otmacro;
+
+  ot = WM_operatortype_append_macro("NLA_OT_duplicate_move",
+                                    "Duplicate",
+                                    "Duplicate selected strips and their Actions and move them",
+                                    OPTYPE_UNDO | OPTYPE_REGISTER);
+  otmacro = WM_operatortype_macro_define(ot, "NLA_OT_duplicate");
+  RNA_boolean_set(otmacro->ptr, "linked", false);
+  WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
+
+  ot = WM_operatortype_append_macro("NLA_OT_duplicate_linked_move",
+                                    "Duplicate Linked",
+                                    "Duplicate selected strips and move them",
+                                    OPTYPE_UNDO | OPTYPE_REGISTER);
+  otmacro = WM_operatortype_macro_define(ot, "NLA_OT_duplicate");
+  RNA_boolean_set(otmacro->ptr, "linked", true);
+  WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
+}
+
 /* ************************** registration - keymaps **********************************/
 
 void nla_keymap(wmKeyConfig *keyconf)



More information about the Bf-blender-cvs mailing list