Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-11-09 11:29:27 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-11-09 11:29:27 +0400
commit9dcd7f3b0b55e49a18296a67863368a0c4fca8b0 (patch)
tree0b4a9adfa3f3d48dd247df863970b0503fa260d8 /source
parent9b91da0d0dea01ef74b317bdaeaf20d19cf7cfd0 (diff)
Fix crash when copying scene with sequencer's animation using Link Objects or Link Object Data methods
- Don't crash if there's any fcurves created for sequencer but no sequencer itself - Don't copy sequencer's fcurves when copy new scene with linking data/objects method
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/scene.c24
-rw-r--r--source/blender/editors/animation/anim_filter.c16
2 files changed, 33 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index c923c34a0ae..edd880238ca 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -58,8 +58,10 @@
#include "BKE_anim.h"
#include "BKE_animsys.h"
+#include "BKE_action.h"
#include "BKE_colortools.h"
#include "BKE_depsgraph.h"
+#include "BKE_fcurve.h"
#include "BKE_global.h"
#include "BKE_group.h"
#include "BKE_idprop.h"
@@ -115,6 +117,24 @@ void free_qtcodecdata(QuicktimeCodecData *qcd)
}
}
+static void remove_sequencer_fcurves(Scene *sce)
+{
+ AnimData *ad = BKE_animdata_from_id(&sce->id);
+
+ if (ad && ad->action) {
+ FCurve *fcu, *nextfcu;
+
+ for (fcu = ad->action->curves.first; fcu; fcu = nextfcu) {
+ nextfcu = fcu->next;
+
+ if ((fcu->rna_path) && strstr(fcu->rna_path, "sequences_all")) {
+ action_groups_remove_channel(ad->action, fcu);
+ free_fcurve(fcu);
+ }
+ }
+ }
+}
+
Scene *BKE_scene_copy(Scene *sce, int type)
{
Scene *scen;
@@ -179,6 +199,10 @@ Scene *BKE_scene_copy(Scene *sce, int type)
BLI_strncpy(scen->sequencer_colorspace_settings.name, sce->sequencer_colorspace_settings.name,
sizeof(scen->sequencer_colorspace_settings.name));
+
+ /* remove animation used by sequencer */
+ if (type != SCE_COPY_FULL)
+ remove_sequencer_fcurves(scen);
}
/* tool settings */
diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c
index 721b3473792..425ee899fe7 100644
--- a/source/blender/editors/animation/anim_filter.c
+++ b/source/blender/editors/animation/anim_filter.c
@@ -911,14 +911,16 @@ static short skip_fcurve_selected_data(bDopeSheet *ads, FCurve *fcu, ID *owner_i
/* only consider if F-Curve involves sequence_editor.sequences */
if ((fcu->rna_path) && strstr(fcu->rna_path, "sequences_all")) {
Editing *ed = BKE_sequencer_editing_get(scene, FALSE);
- Sequence *seq;
+ Sequence *seq = NULL;
char *seq_name;
-
- /* get strip name, and check if this strip is selected */
- seq_name = BLI_str_quoted_substrN(fcu->rna_path, "sequences_all[");
- seq = BKE_sequence_get_by_name(ed->seqbasep, seq_name, FALSE);
- if (seq_name) MEM_freeN(seq_name);
-
+
+ if (ed) {
+ /* get strip name, and check if this strip is selected */
+ seq_name = BLI_str_quoted_substrN(fcu->rna_path, "sequences_all[");
+ seq = BKE_sequence_get_by_name(ed->seqbasep, seq_name, FALSE);
+ if (seq_name) MEM_freeN(seq_name);
+ }
+
/* can only add this F-Curve if it is selected */
if (ads->filterflag & ADS_FILTER_ONLYSEL) {
if ((seq == NULL) || (seq->flag & SELECT) == 0)