diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-10-21 13:36:11 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-10-21 13:36:11 +0400 |
commit | 40938c3b4ba16217c17f9b772e6f8a351992a559 (patch) | |
tree | d6a58d61c62a2445d63a1432874a3c25376624e4 /source/blender/blenkernel/intern/sequencer.c | |
parent | 2e7d72202f297d1900b11ad6ddcc806f0dbb23b8 (diff) |
Fix sequencer clipboard with meta's containing ID references
Diffstat (limited to 'source/blender/blenkernel/intern/sequencer.c')
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index fc2b4d001b8..0a22faf3c26 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -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 */ |