[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59622] trunk/blender/source/blender: fix [#36570] Changing the filename of a image strip doesnt refresh sequencer

Campbell Barton ideasman42 at gmail.com
Thu Aug 29 06:08:46 CEST 2013


Revision: 59622
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59622
Author:   campbellbarton
Date:     2013-08-29 04:08:44 +0000 (Thu, 29 Aug 2013)
Log Message:
-----------
fix [#36570] Changing the filename of a image strip doesnt refresh sequencer

was casting a StripElem as a Sequencer struct.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2013-08-29 03:14:36 UTC (rev 59621)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2013-08-29 04:08:44 UTC (rev 59622)
@@ -194,6 +194,7 @@
 
 void             BKE_sequencer_sort(struct Scene *scene);
 
+struct Sequence *BKE_sequencer_from_elem(ListBase *seqbase, struct StripElem *se);
 struct Sequence *BKE_sequencer_active_get(struct Scene *scene);
 int              BKE_sequencer_active_get_pair(struct Scene *scene, struct Sequence **seq_act, struct Sequence **seq_other);
 void             BKE_sequencer_active_set(struct Scene *scene, struct Sequence *seq);

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2013-08-29 03:14:36 UTC (rev 59621)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2013-08-29 04:08:44 UTC (rev 59622)
@@ -3998,7 +3998,30 @@
 	return NULL;
 }
 
+/**
+ * Only use as last resort when the StripElem is available but no the Sequence.
+ * (needed for RNA)
+ */
+Sequence *BKE_sequencer_from_elem(ListBase *seqbase, StripElem *se)
+{
+	Sequence *iseq;
 
+	for (iseq = seqbase->first; iseq; iseq = iseq->next) {
+		Sequence *seq_found;
+		if ((iseq->strip && iseq->strip->stripdata) &&
+		    (ARRAY_HAS_ITEM(se, iseq->strip->stripdata, iseq->len)))
+		{
+			break;
+		}
+		else if ((seq_found = BKE_sequencer_from_elem(&iseq->seqbase, se))) {
+			iseq = seq_found;
+			break;
+		}
+	}
+
+	return iseq;
+}
+
 Sequence *BKE_sequencer_active_get(Scene *scene)
 {
 	Editing *ed = BKE_sequencer_editing_get(scene, FALSE);

Modified: trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sequencer.c	2013-08-29 03:14:36 UTC (rev 59621)
+++ trunk/blender/source/blender/makesrna/intern/rna_sequencer.c	2013-08-29 04:08:44 UTC (rev 59622)
@@ -93,6 +93,23 @@
 	}
 }
 
+static void rna_SequenceElement_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+	Scene *scene = (Scene *) ptr->id.data;
+	Editing *ed = BKE_sequencer_editing_get(scene, FALSE);
+
+	if (ed) {
+		StripElem *se = (StripElem *)ptr->data;
+		Sequence *seq;
+
+		/* slow but we can't avoid! */
+		seq = BKE_sequencer_from_elem(&ed->seqbase, se);
+		if (seq) {
+			BKE_sequence_invalidate_cache(scene, seq);
+		}
+	}
+}
+
 static void rna_Sequence_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
 {
 	Scene *scene = (Scene *) ptr->id.data;
@@ -1063,7 +1080,7 @@
 	prop = RNA_def_property(srna, "filename", PROP_STRING, PROP_FILENAME);
 	RNA_def_property_string_sdna(prop, NULL, "name");
 	RNA_def_property_ui_text(prop, "Filename", "");
-	RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update");
+	RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceElement_update");
 
 	prop = RNA_def_property(srna, "orig_width", PROP_INT, PROP_NONE);
 	RNA_def_property_int_sdna(prop, NULL, "orig_width");




More information about the Bf-blender-cvs mailing list