VSE: Disable interactivity in combined view

Combined view of timeline and preview causes seemingly unpredictable
behavior after some operators have been allowed to run in preview
region.

Disable new features in this combined view, so behavior should be
consistent with previous versions.

ref: https://developer.blender.org/T92584

Reviewed By: campbellbarton

Differential Revision: https://developer.blender.org/D13419
This commit is contained in:
Richard Antalik 2021-11-30 11:09:58 +01:00
parent c12d8a72ce
commit d8edc2c634
8 changed files with 66 additions and 38 deletions

View File

@ -41,7 +41,7 @@ def _space_view_types(st):
view_type = st.view_type
return (
view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'},
view_type in {'PREVIEW', 'SEQUENCER_PREVIEW'},
view_type == 'PREVIEW',
)
@ -196,10 +196,6 @@ class SEQUENCER_HT_header(Header):
row = layout.row(align=True)
row.prop(sequencer_tool_settings, "overlap_mode", text="")
if st.view_type == 'SEQUENCER_PREVIEW':
row = layout.row(align=True)
row.prop(sequencer_tool_settings, "pivot_point", text="", icon_only=True)
if st.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}:
row = layout.row(align=True)
row.prop(tool_settings, "use_snap_sequencer", text="")
@ -248,7 +244,8 @@ class SEQUENCER_MT_editor_menus(Menu):
layout.menu("SEQUENCER_MT_strip")
layout.menu("SEQUENCER_MT_image")
if st.view_type in {'SEQUENCER', 'PREVIEW'}:
layout.menu("SEQUENCER_MT_image")
class SEQUENCER_PT_gizmo_display(Panel):
@ -576,10 +573,6 @@ class SEQUENCER_MT_select(Menu):
st = context.space_data
has_sequencer, has_preview = _space_view_types(st)
# FIXME: this doesn't work for both preview + window region.
if has_preview:
layout.operator_context = 'INVOKE_REGION_PREVIEW'
layout.operator("sequencer.select_all", text="All").action = 'SELECT'
layout.operator("sequencer.select_all", text="None").action = 'DESELECT'
layout.operator("sequencer.select_all", text="Invert").action = 'INVERT'
@ -821,7 +814,6 @@ class SEQUENCER_MT_strip_transform(Menu):
else:
layout.operator_context = 'INVOKE_REGION_WIN'
# FIXME: mixed preview/sequencer views.
if has_preview:
layout.operator("transform.translate", text="Move")
layout.operator("transform.rotate", text="Rotate")
@ -917,12 +909,6 @@ class SEQUENCER_MT_strip(Menu):
st = context.space_data
has_sequencer, has_preview = _space_view_types(st)
# FIXME: this doesn't work for both preview + window region.
if has_preview:
layout.operator_context = 'INVOKE_REGION_PREVIEW'
else:
layout.operator_context = 'INVOKE_REGION_WIN'
layout.menu("SEQUENCER_MT_strip_transform")
layout.separator()

View File

@ -3153,14 +3153,7 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel):
],
'SEQUENCER_PREVIEW': [
*_tools_select,
_defs_sequencer_generic.cursor,
None,
_defs_sequencer_generic.translate,
_defs_sequencer_generic.rotate,
_defs_sequencer_generic.scale,
_defs_sequencer_generic.transform,
None,
_defs_sequencer_generic.sample,
*_tools_annotate,
None,
_defs_sequencer_generic.blade,

View File

@ -2097,6 +2097,10 @@ static int sequencer_draw_get_transform_preview_frame(Scene *scene)
static void seq_draw_image_origin_and_outline(const bContext *C, Sequence *seq, bool is_active_seq)
{
SpaceSeq *sseq = CTX_wm_space_seq(C);
const ARegion *region = CTX_wm_region(C);
if (region->regiontype == RGN_TYPE_PREVIEW && !sequencer_view_preview_only_poll(C)) {
return;
}
if ((seq->flag & SELECT) == 0) {
return;
}

View File

@ -210,7 +210,7 @@ bool sequencer_strip_has_path_poll(bContext *C)
(SEQ_HAS_PATH(seq)));
}
bool sequencer_view_preview_poll(bContext *C)
bool sequencer_view_has_preview_poll(bContext *C)
{
SpaceSeq *sseq = CTX_wm_space_seq(C);
if (sseq == NULL) {
@ -231,6 +231,26 @@ bool sequencer_view_preview_poll(bContext *C)
return true;
}
bool sequencer_view_preview_only_poll(const bContext *C)
{
SpaceSeq *sseq = CTX_wm_space_seq(C);
if (sseq == NULL) {
return false;
}
if (SEQ_editing_get(CTX_data_scene(C)) == NULL) {
return false;
}
if (!(ELEM(sseq->view, SEQ_VIEW_PREVIEW) && (sseq->mainb == SEQ_DRAW_IMG_IMBUF))) {
return false;
}
ARegion *region = CTX_wm_region(C);
if (!(region && region->regiontype == RGN_TYPE_PREVIEW)) {
return false;
}
return true;
}
bool sequencer_view_strips_poll(bContext *C)
{
SpaceSeq *sseq = CTX_wm_space_seq(C);
@ -1710,8 +1730,11 @@ static int sequencer_delete_exec(bContext *C, wmOperator *UNUSED(op))
SEQ_prefetch_stop(scene);
const bool is_preview = sequencer_view_preview_poll(C);
const bool is_preview = sequencer_view_has_preview_poll(C);
if (is_preview) {
if (!sequencer_view_preview_only_poll(C)) {
return OPERATOR_CANCELLED;
}
SEQ_query_rendered_strips_to_tag(seqbasep, scene->r.cfra, 0);
}
@ -3438,7 +3461,7 @@ void SEQUENCER_OT_cursor_set(wmOperatorType *ot)
/* api callbacks */
ot->exec = sequencer_set_2d_cursor_exec;
ot->invoke = sequencer_set_2d_cursor_invoke;
ot->poll = sequencer_view_preview_poll;
ot->poll = sequencer_view_has_preview_poll;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;

View File

@ -110,7 +110,8 @@ bool sequencer_edit_poll(struct bContext *C);
/* UNUSED */
/* bool sequencer_strip_poll(struct bContext *C); */
bool sequencer_strip_has_path_poll(struct bContext *C);
bool sequencer_view_preview_poll(struct bContext *C);
bool sequencer_view_has_preview_poll(struct bContext *C);
bool sequencer_view_preview_only_poll(const struct bContext *C);
bool sequencer_view_strips_poll(struct bContext *C);
/* Externs. */

View File

@ -416,8 +416,11 @@ static int sequencer_de_select_all_exec(bContext *C, wmOperator *op)
Editing *ed = SEQ_editing_get(scene);
Sequence *seq;
const bool is_preview = sequencer_view_preview_poll(C);
const bool is_preview = sequencer_view_has_preview_poll(C);
if (is_preview) {
if (!sequencer_view_preview_only_poll(C)) {
return OPERATOR_CANCELLED;
}
SEQ_query_rendered_strips_to_tag(ed->seqbasep, scene->r.cfra, 0);
}
@ -494,8 +497,11 @@ static int sequencer_select_inverse_exec(bContext *C, wmOperator *UNUSED(op))
Editing *ed = SEQ_editing_get(scene);
Sequence *seq;
const bool is_preview = sequencer_view_preview_poll(C);
const bool is_preview = sequencer_view_has_preview_poll(C);
if (is_preview) {
if (!sequencer_view_preview_only_poll(C)) {
return OPERATOR_CANCELLED;
}
SEQ_query_rendered_strips_to_tag(ed->seqbasep, scene->r.cfra, 0);
}
@ -866,6 +872,9 @@ static int sequencer_select_exec(bContext *C, wmOperator *op)
}
if (region->regiontype == RGN_TYPE_PREVIEW) {
if (!sequencer_view_preview_only_poll(C)) {
return OPERATOR_CANCELLED;
}
const SpaceSeq *sseq = CTX_wm_space_seq(C);
if (sseq->mainb != SEQ_DRAW_IMG_IMBUF) {
return OPERATOR_CANCELLED;
@ -1612,6 +1621,9 @@ static int sequencer_box_select_exec(bContext *C, wmOperator *op)
ARegion *region = CTX_wm_region(C);
if (region->regiontype == RGN_TYPE_PREVIEW) {
if (!sequencer_view_preview_only_poll(C)) {
return OPERATOR_CANCELLED;
}
seq_box_select_seq_from_preview(C, &rectf, sel_op);
sequencer_select_do_updates(C, scene);
return OPERATOR_FINISHED;
@ -1671,6 +1683,11 @@ static int sequencer_box_select_invoke(bContext *C, wmOperator *op, const wmEven
{
Scene *scene = CTX_data_scene(C);
View2D *v2d = &CTX_wm_region(C)->v2d;
ARegion *region = CTX_wm_region(C);
if (region->regiontype == RGN_TYPE_PREVIEW && !sequencer_view_preview_only_poll(C)) {
return OPERATOR_CANCELLED;
}
const bool tweak = RNA_boolean_get(op->ptr, "tweak");
@ -2003,8 +2020,11 @@ static int sequencer_select_grouped_exec(bContext *C, wmOperator *op)
ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(scene));
Sequence *actseq = SEQ_select_active_get(scene);
const bool is_preview = sequencer_view_preview_poll(C);
const bool is_preview = sequencer_view_has_preview_poll(C);
if (is_preview) {
if (!sequencer_view_preview_only_poll(C)) {
return OPERATOR_CANCELLED;
}
SEQ_query_rendered_strips_to_tag(seqbase, scene->r.cfra, 0);
if (actseq && actseq->tmp_tag == false) {
actseq = NULL;

View File

@ -405,7 +405,7 @@ void SEQUENCER_OT_view_ghost_border(wmOperatorType *ot)
ot->invoke = WM_gesture_box_invoke;
ot->exec = view_ghost_border_exec;
ot->modal = WM_gesture_box_modal;
ot->poll = sequencer_view_preview_poll;
ot->poll = sequencer_view_has_preview_poll;
ot->cancel = WM_gesture_box_cancel;
/* Flags. */

View File

@ -118,16 +118,17 @@ static void freeSeqData(TransInfo *UNUSED(t),
void createTransSeqImageData(TransInfo *t)
{
Editing *ed = SEQ_editing_get(t->scene);
const SpaceSeq *sseq = t->area->spacedata.first;
const ARegion *region = t->region;
if (ed == NULL) {
return;
}
{
const SpaceSeq *sseq = t->area->spacedata.first;
if (sseq->mainb != SEQ_DRAW_IMG_IMBUF) {
return;
}
if (sseq->mainb != SEQ_DRAW_IMG_IMBUF) {
return;
}
if (region->regiontype == RGN_TYPE_PREVIEW && sseq->view == SEQ_VIEW_SEQUENCE_PREVIEW) {
return;
}
ListBase *seqbase = SEQ_active_seqbase_get(ed);