Sequencer: use escaping for sequence names
This commit is contained in:
@@ -4037,19 +4037,31 @@ int BKE_sequence_swap(Sequence *seq_a, Sequence *seq_b, const char **error_str)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* prefix + [" + escaped_name + "] + \0 */
|
||||||
|
#define SEQ_RNAPATH_MAXSTR ((30 + 2 + (SEQ_NAME_MAXSTR * 2) + 2) + 1)
|
||||||
|
|
||||||
|
static size_t sequencer_rna_path_prefix(char str[SEQ_RNAPATH_MAXSTR], const char *name)
|
||||||
|
{
|
||||||
|
char name_esc[SEQ_NAME_MAXSTR * 2];
|
||||||
|
|
||||||
|
BLI_strescape(name_esc, name, sizeof(name_esc));
|
||||||
|
return BLI_snprintf(str, SEQ_RNAPATH_MAXSTR, "sequence_editor.sequences_all[\"%s\"]", name_esc);
|
||||||
|
}
|
||||||
|
|
||||||
/* XXX - hackish function needed for transforming strips! TODO - have some better solution */
|
/* XXX - hackish function needed for transforming strips! TODO - have some better solution */
|
||||||
void BKE_sequencer_offset_animdata(Scene *scene, Sequence *seq, int ofs)
|
void BKE_sequencer_offset_animdata(Scene *scene, Sequence *seq, int ofs)
|
||||||
{
|
{
|
||||||
char str[SEQ_NAME_MAXSTR + 3];
|
char str[SEQ_RNAPATH_MAXSTR];
|
||||||
|
size_t str_len;
|
||||||
FCurve *fcu;
|
FCurve *fcu;
|
||||||
|
|
||||||
if (scene->adt == NULL || ofs == 0 || scene->adt->action == NULL)
|
if (scene->adt == NULL || ofs == 0 || scene->adt->action == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BLI_snprintf(str, sizeof(str), "[\"%s\"]", seq->name + 2);
|
str_len = sequencer_rna_path_prefix(str, seq->name + 2);
|
||||||
|
|
||||||
for (fcu = scene->adt->action->curves.first; fcu; fcu = fcu->next) {
|
for (fcu = scene->adt->action->curves.first; fcu; fcu = fcu->next) {
|
||||||
if (strstr(fcu->rna_path, "sequence_editor.sequences_all[") && strstr(fcu->rna_path, str)) {
|
if (STREQLEN(fcu->rna_path, str, str_len)) {
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
if (fcu->bezt) {
|
if (fcu->bezt) {
|
||||||
for (i = 0; i < fcu->totvert; i++) {
|
for (i = 0; i < fcu->totvert; i++) {
|
||||||
@@ -4071,7 +4083,8 @@ void BKE_sequencer_offset_animdata(Scene *scene, Sequence *seq, int ofs)
|
|||||||
|
|
||||||
void BKE_sequencer_dupe_animdata(Scene *scene, const char *name_src, const char *name_dst)
|
void BKE_sequencer_dupe_animdata(Scene *scene, const char *name_src, const char *name_dst)
|
||||||
{
|
{
|
||||||
char str_from[SEQ_NAME_MAXSTR + 3];
|
char str_from[SEQ_RNAPATH_MAXSTR];
|
||||||
|
size_t str_from_len;
|
||||||
FCurve *fcu;
|
FCurve *fcu;
|
||||||
FCurve *fcu_last;
|
FCurve *fcu_last;
|
||||||
FCurve *fcu_cpy;
|
FCurve *fcu_cpy;
|
||||||
@@ -4080,12 +4093,12 @@ void BKE_sequencer_dupe_animdata(Scene *scene, const char *name_src, const char
|
|||||||
if (scene->adt == NULL || scene->adt->action == NULL)
|
if (scene->adt == NULL || scene->adt->action == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BLI_snprintf(str_from, sizeof(str_from), "[\"%s\"]", name_src);
|
str_from_len = sequencer_rna_path_prefix(str_from, name_src);
|
||||||
|
|
||||||
fcu_last = scene->adt->action->curves.last;
|
fcu_last = scene->adt->action->curves.last;
|
||||||
|
|
||||||
for (fcu = scene->adt->action->curves.first; fcu && fcu->prev != fcu_last; fcu = fcu->next) {
|
for (fcu = scene->adt->action->curves.first; fcu && fcu->prev != fcu_last; fcu = fcu->next) {
|
||||||
if (strstr(fcu->rna_path, "sequence_editor.sequences_all[") && strstr(fcu->rna_path, str_from)) {
|
if (STREQLEN(fcu->rna_path, str_from, str_from_len)) {
|
||||||
fcu_cpy = copy_fcurve(fcu);
|
fcu_cpy = copy_fcurve(fcu);
|
||||||
BLI_addtail(&lb, fcu_cpy);
|
BLI_addtail(&lb, fcu_cpy);
|
||||||
}
|
}
|
||||||
@@ -4101,18 +4114,19 @@ void BKE_sequencer_dupe_animdata(Scene *scene, const char *name_src, const char
|
|||||||
/* XXX - hackish function needed to remove all fcurves belonging to a sequencer strip */
|
/* XXX - hackish function needed to remove all fcurves belonging to a sequencer strip */
|
||||||
static void seq_free_animdata(Scene *scene, Sequence *seq)
|
static void seq_free_animdata(Scene *scene, Sequence *seq)
|
||||||
{
|
{
|
||||||
char str[SEQ_NAME_MAXSTR + 3];
|
char str[SEQ_RNAPATH_MAXSTR];
|
||||||
|
size_t str_len;
|
||||||
FCurve *fcu;
|
FCurve *fcu;
|
||||||
|
|
||||||
if (scene->adt == NULL || scene->adt->action == NULL)
|
if (scene->adt == NULL || scene->adt->action == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BLI_snprintf(str, sizeof(str), "[\"%s\"]", seq->name + 2);
|
str_len = sequencer_rna_path_prefix(str, seq->name + 2);
|
||||||
|
|
||||||
fcu = scene->adt->action->curves.first;
|
fcu = scene->adt->action->curves.first;
|
||||||
|
|
||||||
while (fcu) {
|
while (fcu) {
|
||||||
if (strstr(fcu->rna_path, "sequence_editor.sequences_all[") && strstr(fcu->rna_path, str)) {
|
if (STREQLEN(fcu->rna_path, str, str_len)) {
|
||||||
FCurve *next_fcu = fcu->next;
|
FCurve *next_fcu = fcu->next;
|
||||||
|
|
||||||
BLI_remlink(&scene->adt->action->curves, fcu);
|
BLI_remlink(&scene->adt->action->curves, fcu);
|
||||||
@@ -4126,6 +4140,8 @@ static void seq_free_animdata(Scene *scene, Sequence *seq)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef SEQ_RNAPATH_MAXSTR
|
||||||
|
|
||||||
Sequence *BKE_sequence_get_by_name(ListBase *seqbase, const char *name, bool recursive)
|
Sequence *BKE_sequence_get_by_name(ListBase *seqbase, const char *name, bool recursive)
|
||||||
{
|
{
|
||||||
Sequence *iseq = NULL;
|
Sequence *iseq = NULL;
|
||||||
|
Reference in New Issue
Block a user