Fix sequencer clipboard with meta's containing ID references
This commit is contained in:
parent
2e7d72202f
commit
40938c3b4b
|
@ -217,6 +217,10 @@ void BKE_sequence_clipboard_pointers_free(struct Sequence *seq);
|
|||
void BKE_sequence_clipboard_pointers_store(struct Sequence *seq);
|
||||
void BKE_sequence_clipboard_pointers_restore(struct Sequence *seq, struct Main *bmain);
|
||||
|
||||
void BKE_sequencer_base_clipboard_pointers_free(struct ListBase *seqbase);
|
||||
void BKE_sequencer_base_clipboard_pointers_store(struct ListBase *seqbase);
|
||||
void BKE_sequencer_base_clipboard_pointers_restore(struct ListBase *seqbase, struct Main *bmain);
|
||||
|
||||
void BKE_sequence_free(struct Scene *scene, struct Sequence *seq);
|
||||
const char *BKE_sequence_give_name(struct Sequence *seq);
|
||||
void BKE_sequence_calc(struct Scene *scene, struct Sequence *seq);
|
||||
|
|
|
@ -257,26 +257,15 @@ Editing *BKE_sequencer_editing_get(Scene *scene, bool alloc)
|
|||
return scene->ed;
|
||||
}
|
||||
|
||||
static void seq_free_clipboard_recursive(Sequence *seq_parent)
|
||||
{
|
||||
Sequence *seq, *nseq;
|
||||
|
||||
for (seq = seq_parent->seqbase.first; seq; seq = nseq) {
|
||||
nseq = seq->next;
|
||||
seq_free_clipboard_recursive(seq);
|
||||
}
|
||||
|
||||
BKE_sequence_clipboard_pointers_free(seq_parent);
|
||||
BKE_sequence_free_ex(NULL, seq_parent, false);
|
||||
}
|
||||
|
||||
void BKE_sequencer_free_clipboard(void)
|
||||
{
|
||||
Sequence *seq, *nseq;
|
||||
|
||||
BKE_sequencer_base_clipboard_pointers_free(&seqbase_clipboard);
|
||||
|
||||
for (seq = seqbase_clipboard.first; seq; seq = nseq) {
|
||||
nseq = seq->next;
|
||||
seq_free_clipboard_recursive(seq);
|
||||
seq_free_sequence_recurse(NULL, seq);
|
||||
}
|
||||
BLI_listbase_clear(&seqbase_clipboard);
|
||||
}
|
||||
|
@ -373,6 +362,33 @@ void BKE_sequence_clipboard_pointers_restore(Sequence *seq, Main *bmain)
|
|||
seqclipboard_ptr_restore(bmain, (ID **)&seq->mask);
|
||||
seqclipboard_ptr_restore(bmain, (ID **)&seq->sound);
|
||||
}
|
||||
|
||||
/* recursive versions of funcions above */
|
||||
void BKE_sequencer_base_clipboard_pointers_free(ListBase *seqbase)
|
||||
{
|
||||
Sequence *seq;
|
||||
for (seq = seqbase->first; seq; seq = seq->next) {
|
||||
BKE_sequence_clipboard_pointers_free(seq);
|
||||
BKE_sequencer_base_clipboard_pointers_free(&seq->seqbase);
|
||||
}
|
||||
}
|
||||
void BKE_sequencer_base_clipboard_pointers_store(ListBase *seqbase)
|
||||
{
|
||||
Sequence *seq;
|
||||
for (seq = seqbase->first; seq; seq = seq->next) {
|
||||
BKE_sequence_clipboard_pointers_store(seq);
|
||||
BKE_sequencer_base_clipboard_pointers_store(&seq->seqbase);
|
||||
}
|
||||
}
|
||||
void BKE_sequencer_base_clipboard_pointers_restore(ListBase *seqbase, Main *bmain)
|
||||
{
|
||||
Sequence *seq;
|
||||
for (seq = seqbase->first; seq; seq = seq->next) {
|
||||
BKE_sequence_clipboard_pointers_restore(seq, bmain);
|
||||
BKE_sequencer_base_clipboard_pointers_restore(&seq->seqbase, bmain);
|
||||
}
|
||||
}
|
||||
|
||||
/* end clipboard pointer mess */
|
||||
|
||||
|
||||
|
|
|
@ -3153,9 +3153,7 @@ static int sequencer_copy_exec(bContext *C, wmOperator *op)
|
|||
}
|
||||
|
||||
/* duplicate pointers */
|
||||
for (seq = seqbase_clipboard.first; seq; seq = seq->next) {
|
||||
BKE_sequence_clipboard_pointers_store(seq);
|
||||
}
|
||||
BKE_sequencer_base_clipboard_pointers_store(&seqbase_clipboard);
|
||||
}
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
|
@ -3199,9 +3197,7 @@ static int sequencer_paste_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
}
|
||||
}
|
||||
|
||||
for (iseq = nseqbase.first; iseq; iseq = iseq->next) {
|
||||
BKE_sequence_clipboard_pointers_restore(iseq, bmain);
|
||||
}
|
||||
BKE_sequencer_base_clipboard_pointers_restore(&nseqbase, bmain);
|
||||
|
||||
for (iseq = nseqbase.first; iseq; iseq = iseq->next) {
|
||||
BKE_sequence_sound_init(scene, iseq);
|
||||
|
|
Loading…
Reference in New Issue