fix [#36570] Changing the filename of a image strip doesnt refresh sequencer
was casting a StripElem as a Sequencer struct.
This commit is contained in:
@@ -194,6 +194,7 @@ void BKE_sequencer_editing_free(struct Scene *scene);
|
||||
|
||||
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);
|
||||
|
@@ -3998,6 +3998,29 @@ Sequence *BKE_sequence_get_by_name(ListBase *seqbase, const char *name, int recu
|
||||
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)
|
||||
{
|
||||
|
@@ -93,6 +93,23 @@ static void meta_tmp_ref(Sequence *seq_par, Sequence *seq)
|
||||
}
|
||||
}
|
||||
|
||||
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 @@ static void rna_def_strip_element(BlenderRNA *brna)
|
||||
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");
|
||||
|
Reference in New Issue
Block a user