[Bf-blender-cvs] [4823bd1] master: Fix crash when deleting strip used as mask in another strip modifier
Sergey Sharybin
noreply at git.blender.org
Thu Feb 20 08:53:21 CET 2014
Commit: 4823bd14542ce1d4251a35bc055cb1a8e947d085
Author: Sergey Sharybin
Date: Thu Feb 20 13:52:49 2014 +0600
https://developer.blender.org/rB4823bd14542ce1d4251a35bc055cb1a8e947d085
Fix crash when deleting strip used as mask in another strip modifier
===================================================================
M source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 92d8a0a..0a37496 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -614,6 +614,26 @@ static Sequence *del_seq_find_replace_recurs(Scene *scene, Sequence *seq)
return seq;
}
+static void del_seq_clear_modifiers_recurs(Scene *scene, Sequence *deleting_sequence)
+{
+ Editing *ed = BKE_sequencer_editing_get(scene, FALSE);
+ Sequence *current_sequence;
+
+ SEQP_BEGIN(ed, current_sequence)
+ {
+ if (!(current_sequence->flag & SELECT) && current_sequence != deleting_sequence) {
+ SequenceModifierData *smd;
+
+ for (smd = current_sequence->modifiers.first; smd; smd = smd->next) {
+ if (smd->mask_sequence == deleting_sequence) {
+ smd->mask_sequence = NULL;
+ }
+ }
+ }
+ }
+ SEQ_END
+}
+
static void recurs_del_seq_flag(Scene *scene, ListBase *lb, short flag, short deleteall)
{
Sequence *seq, *seqn;
@@ -1746,10 +1766,17 @@ static int sequencer_delete_exec(bContext *C, wmOperator *UNUSED(op))
if (nothingSelected)
return OPERATOR_FINISHED;
- /* for effects, try to find a replacement input */
- for (seq = ed->seqbasep->first; seq; seq = seq->next)
- if ((seq->type & SEQ_TYPE_EFFECT) && !(seq->flag & SELECT))
- del_seq_find_replace_recurs(scene, seq);
+ /* for effects and modifiers, try to find a replacement input */
+ for (seq = ed->seqbasep->first; seq; seq = seq->next) {
+ if (!(seq->flag & SELECT)) {
+ if ((seq->type & SEQ_TYPE_EFFECT)) {
+ del_seq_find_replace_recurs(scene, seq);
+ }
+ }
+ else {
+ del_seq_clear_modifiers_recurs(scene, seq);
+ }
+ }
/* delete all selected strips */
recurs_del_seq_flag(scene, ed->seqbasep, SELECT, 0);
More information about the Bf-blender-cvs
mailing list