diff options
author | Richard Antalik <richardantalik@gmail.com> | 2021-08-24 01:52:24 +0300 |
---|---|---|
committer | Richard Antalik <richardantalik@gmail.com> | 2021-08-24 01:52:24 +0300 |
commit | 709ce44617bf8c41b5bfe9a93aa58e9140323428 (patch) | |
tree | e1e4a55456a4cbd9bc147baa3d2dd74fac92d370 /source/blender/editors | |
parent | 24a3446787d31f9b32e6759f91349b598c8e9774 (diff) |
Fix T90407: Split fails on transition strips
When splitting strips, first they are duplicated and then offsets
adjusted. This can fail on cross transitions, because some strips don't
overlap with split frame.
All strips, that relate to each other must be duplicated to ensure
correct relations after splitting, so solution is to delete non
overlapping strips from left or right side respectively.
Since cross transition don't have to overlap with source strips,
splitting such strips would lead to effect being deleted, which
could cause crash when iterating over strips in python. Therefore
splitting of such strips is now forbidden and will generate error.
Splitting of transition will also generate error solely because such
operation is illogical.
Reviewed By: sergey
Differential Revision: https://developer.blender.org/D12121
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_edit.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 9a2225a44c5..694e5fbb41d 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -1446,9 +1446,14 @@ static int sequencer_split_exec(bContext *C, wmOperator *op) } if (ignore_selection || seq->flag & SELECT) { - if (SEQ_edit_strip_split(bmain, scene, ed->seqbasep, seq, split_frame, method) != NULL) { + const char *error_msg = NULL; + if (SEQ_edit_strip_split(bmain, scene, ed->seqbasep, seq, split_frame, method, &error_msg) != + NULL) { changed = true; } + if (error_msg != NULL) { + BKE_report(op->reports, RPT_ERROR, error_msg); + } } } |