diff --git a/scripts/presets/keyconfig/keymap_data/blender_default.py b/scripts/presets/keyconfig/keymap_data/blender_default.py index b25dc3d6e01..6aae270d4f6 100644 --- a/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -3217,6 +3217,12 @@ def km_sequencer_preview(params): {"properties": [("property", 'ROTATION')]}), ("sequencer.preview_duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None), + ("sequencer.mute", {"type": 'H', "value": 'PRESS'}, + {"properties": [("unselected", False)]}), + ("sequencer.mute", {"type": 'H', "value": 'PRESS', "shift": True}, + {"properties": [("unselected", True)]}), + ("sequencer.unmute", {"type": 'H', "value": 'PRESS', "alt": True}, + {"properties": [("unselected", False)]}), ("sequencer.delete", {"type": 'X', "value": 'PRESS'}, None), ("sequencer.delete", {"type": 'DEL', "value": 'PRESS'}, None), diff --git a/scripts/startup/bl_ui/space_sequencer.py b/scripts/startup/bl_ui/space_sequencer.py index 9cf21aefa0a..d6eedab1a2e 100644 --- a/scripts/startup/bl_ui/space_sequencer.py +++ b/scripts/startup/bl_ui/space_sequencer.py @@ -941,6 +941,18 @@ class SEQUENCER_MT_strip_text(Menu): layout.operator("sequencer.text_deselect_all") +class SEQUENCER_MT_strip_show_hide(Menu): + bl_label = "Show/Hide" + + def draw(self, context): + layout = self.layout + layout.operator_context = 'INVOKE_REGION_PREVIEW' + layout.operator("sequencer.unmute", text="Show Hidden Strips").unselected = False + layout.separator() + layout.operator("sequencer.mute", text="Hide Selected").unselected = False + layout.operator("sequencer.mute", text="Hide Unselected").unselected = True + + class SEQUENCER_MT_strip_input(Menu): bl_label = "Inputs" @@ -1061,6 +1073,8 @@ class SEQUENCER_MT_strip(Menu): layout.separator() layout.operator("sequencer.preview_duplicate_move", text="Duplicate") layout.separator() + layout.menu("SEQUENCER_MT_strip_show_hide") + layout.separator() if strip and strip.type == 'TEXT': layout.menu("SEQUENCER_MT_strip_text") @@ -3114,6 +3128,7 @@ classes = ( SEQUENCER_MT_strip_transform, SEQUENCER_MT_strip_retiming, SEQUENCER_MT_strip_text, + SEQUENCER_MT_strip_show_hide, SEQUENCER_MT_strip_input, SEQUENCER_MT_strip_lock_mute, SEQUENCER_MT_image, diff --git a/source/blender/editors/space_sequencer/sequencer_edit.cc b/source/blender/editors/space_sequencer/sequencer_edit.cc index d25e1ce8848..eafd15dc418 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.cc +++ b/source/blender/editors/space_sequencer/sequencer_edit.cc @@ -888,9 +888,9 @@ void SEQUENCER_OT_slip(wmOperatorType *ot) static wmOperatorStatus sequencer_mute_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); - Editing *ed = seq::editing_get(scene); + blender::VectorSet strips = all_strips_from_context(C); - LISTBASE_FOREACH (Strip *, strip, ed->seqbasep) { + for (Strip *strip : strips) { if (!RNA_boolean_get(op->ptr, "unselected")) { if (strip->flag & SELECT) { strip->flag |= SEQ_MUTE; @@ -939,9 +939,19 @@ static wmOperatorStatus sequencer_unmute_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); Editing *ed = seq::editing_get(scene); - + ARegion *region = CTX_wm_region(C); + const bool is_preview = (region->regiontype == RGN_TYPE_PREVIEW) && + sequencer_view_preview_only_poll(C); LISTBASE_FOREACH (Strip *, strip, ed->seqbasep) { - if (!RNA_boolean_get(op->ptr, "unselected")) { + if (is_preview) { + if (seq::time_strip_intersects_frame(scene, strip, scene->r.cfra) && + strip->type != STRIP_TYPE_SOUND_RAM) + { + strip->flag &= ~SEQ_MUTE; + seq::relations_invalidate_dependent(scene, strip); + } + } + else if (!RNA_boolean_get(op->ptr, "unselected")) { if (strip->flag & SELECT) { strip->flag &= ~SEQ_MUTE; seq::relations_invalidate_dependent(scene, strip);