diff --git a/scripts/startup/bl_ui/space_sequencer.py b/scripts/startup/bl_ui/space_sequencer.py index e49801e7d00..a4ea29a2e2e 100644 --- a/scripts/startup/bl_ui/space_sequencer.py +++ b/scripts/startup/bl_ui/space_sequencer.py @@ -656,8 +656,8 @@ class SEQUENCER_MT_change(Menu): del bpy_data_scenes_len layout.operator_context = 'INVOKE_DEFAULT' - layout.operator("sequencer.change_effect_input") layout.menu("SEQUENCER_MT_strip_effect_change") + layout.operator("sequencer.swap_inputs") props = layout.operator("sequencer.change_path", text="Path/Files") if strip: @@ -999,7 +999,6 @@ class SEQUENCER_MT_strip_effect(Menu): def draw(self, _context): layout = self.layout - layout.operator("sequencer.change_effect_input") layout.menu("SEQUENCER_MT_strip_effect_change") layout.operator("sequencer.reassign_inputs") layout.operator("sequencer.swap_inputs") diff --git a/source/blender/editors/space_sequencer/sequencer_edit.cc b/source/blender/editors/space_sequencer/sequencer_edit.cc index 669485c6ee1..c7193fa0000 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.cc +++ b/source/blender/editors/space_sequencer/sequencer_edit.cc @@ -262,6 +262,33 @@ bool sequencer_view_strips_poll(bContext *C) return true; } +static bool sequencer_effect_poll(bContext *C) +{ + Scene *scene = CTX_data_scene(C); + Editing *ed = seq::editing_get(scene); + + if (ed) { + Strip *active_strip = seq::select_active_get(scene); + if (active_strip && (active_strip->type & STRIP_TYPE_EFFECT)) { + return true; + } + } + + return false; +} + +static bool sequencer_swap_inputs_poll(bContext *C) +{ + Scene *scene = CTX_data_scene(C); + Strip *active_strip = seq::select_active_get(scene); + + if (sequencer_effect_poll(C) && seq::effect_get_num_inputs(active_strip->type) == 2) { + return true; + } + + return false; +} + /** \} */ /* -------------------------------------------------------------------- */ @@ -1364,21 +1391,6 @@ static wmOperatorStatus sequencer_reassign_inputs_exec(bContext *C, wmOperator * return OPERATOR_FINISHED; } -static bool sequencer_effect_poll(bContext *C) -{ - Scene *scene = CTX_data_scene(C); - Editing *ed = seq::editing_get(scene); - - if (ed) { - Strip *active_strip = seq::select_active_get(scene); - if (active_strip && (active_strip->type & STRIP_TYPE_EFFECT)) { - return true; - } - } - - return false; -} - void SEQUENCER_OT_reassign_inputs(wmOperatorType *ot) { /* Identifiers. */ @@ -1405,8 +1417,15 @@ static wmOperatorStatus sequencer_swap_inputs_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); Strip *active_strip = seq::select_active_get(scene); - if (active_strip->input1 == nullptr || active_strip->input2 == nullptr) { - BKE_report(op->reports, RPT_ERROR, "No valid inputs to swap"); + if (!(active_strip->type & STRIP_TYPE_EFFECT)) { + BKE_report(op->reports, RPT_ERROR, "Active strip is not an effect strip"); + return OPERATOR_CANCELLED; + } + + if (seq::effect_get_num_inputs(active_strip->type) != 2 || active_strip->input1 == nullptr || + active_strip->input2 == nullptr) + { + BKE_report(op->reports, RPT_ERROR, "Strip needs two inputs to swap"); return OPERATOR_CANCELLED; } @@ -1415,7 +1434,6 @@ static wmOperatorStatus sequencer_swap_inputs_exec(bContext *C, wmOperator *op) active_strip->input2 = strip; seq::relations_invalidate_cache(scene, active_strip); - WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene); return OPERATOR_FINISHED; @@ -1429,7 +1447,7 @@ void SEQUENCER_OT_swap_inputs(wmOperatorType *ot) /* API callbacks. */ ot->exec = sequencer_swap_inputs_exec; - ot->poll = sequencer_effect_poll; + ot->poll = sequencer_swap_inputs_poll; /* Flags. */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -2676,46 +2694,6 @@ void SEQUENCER_OT_swap_data(wmOperatorType *ot) /** \} */ -/* -------------------------------------------------------------------- */ -/** \name Change Effect Input Operator - * \{ */ - -static wmOperatorStatus sequencer_change_effect_input_exec(bContext *C, wmOperator *op) -{ - Scene *scene = CTX_data_scene(C); - Strip *strip = seq::select_active_get(scene); - - Strip **strip_1 = &strip->input1, **strip_2 = &strip->input2; - - if (*strip_1 == nullptr || *strip_2 == nullptr) { - BKE_report(op->reports, RPT_ERROR, "One of the effect inputs is unset, cannot swap"); - return OPERATOR_CANCELLED; - } - - std::swap(*strip_1, *strip_2); - - seq::relations_invalidate_cache(scene, strip); - WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene); - - return OPERATOR_FINISHED; -} - -void SEQUENCER_OT_change_effect_input(wmOperatorType *ot) -{ - /* Identifiers. */ - ot->name = "Change Effect Input"; - ot->idname = "SEQUENCER_OT_change_effect_input"; - - /* API callbacks. */ - ot->exec = sequencer_change_effect_input_exec; - ot->poll = sequencer_effect_poll; - - /* Flags. */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; -} - -/** \} */ - /* -------------------------------------------------------------------- */ /** \name Change Effect Type Operator * \{ */ diff --git a/source/blender/editors/space_sequencer/sequencer_intern.hh b/source/blender/editors/space_sequencer/sequencer_intern.hh index 64e5129b170..35349c9f3f5 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.hh +++ b/source/blender/editors/space_sequencer/sequencer_intern.hh @@ -235,7 +235,6 @@ void SEQUENCER_OT_swap(wmOperatorType *ot); void SEQUENCER_OT_swap_data(wmOperatorType *ot); void SEQUENCER_OT_rendersize(wmOperatorType *ot); -void SEQUENCER_OT_change_effect_input(wmOperatorType *ot); void SEQUENCER_OT_change_effect_type(wmOperatorType *ot); void SEQUENCER_OT_change_path(wmOperatorType *ot); void SEQUENCER_OT_change_scene(wmOperatorType *ot); diff --git a/source/blender/editors/space_sequencer/sequencer_ops.cc b/source/blender/editors/space_sequencer/sequencer_ops.cc index 6f8a4083c33..9de25a74864 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.cc +++ b/source/blender/editors/space_sequencer/sequencer_ops.cc @@ -59,7 +59,6 @@ void sequencer_operatortypes() WM_operatortype_append(SEQUENCER_OT_rebuild_proxy); WM_operatortype_append(SEQUENCER_OT_enable_proxies); - WM_operatortype_append(SEQUENCER_OT_change_effect_input); WM_operatortype_append(SEQUENCER_OT_change_effect_type); WM_operatortype_append(SEQUENCER_OT_change_path); WM_operatortype_append(SEQUENCER_OT_change_scene);