[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