diff --git a/project/clip.cpp b/project/clip.cpp index 4ec7ccb3c..0ec266fc4 100644 --- a/project/clip.cpp +++ b/project/clip.cpp @@ -127,7 +127,7 @@ Clip::~Clip() { close_clip(this); // make sure clip has closed before clip is destroyed - if (multithreaded) { + if (multithreaded && media_type == MEDIA_TYPE_FOOTAGE) { cacher->wait(); } } diff --git a/project/undo.cpp b/project/undo.cpp index 081deeccb..510a101e6 100644 --- a/project/undo.cpp +++ b/project/undo.cpp @@ -624,7 +624,7 @@ void ReplaceMediaCommand::replace(QString& filename) { Clip* c = s->get_clip(j); if (c != NULL && c->media == media && c->open) { close_clip(c); - c->cacher->wait(); + if (c->media_type == MEDIA_TYPE_FOOTAGE) c->cacher->wait(); c->replaced = true; } } @@ -666,7 +666,7 @@ void ReplaceClipMediaCommand::replace(bool undo) { Clip* c = clips.at(i); if (c->open) { close_clip(c); - c->cacher->wait(); + if (c->media_type == MEDIA_TYPE_FOOTAGE) c->cacher->wait(); } if (undo) { diff --git a/ui/timelinewidget.cpp b/ui/timelinewidget.cpp index 4f74b23d5..3a8a7d55d 100644 --- a/ui/timelinewidget.cpp +++ b/ui/timelinewidget.cpp @@ -542,28 +542,42 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) { c->color_b = 64; c->track = g.track; + Selection s; + s.in = c->timeline_in; + s.out = c->timeline_out; + s.track = c->track; + QVector areas; + areas.append(s); + panel_timeline->delete_areas_and_relink(ta, areas); + QVector add; add.append(c); ta->add_clips(sequence, add); - ta->add_effect(sequence, sequence->clip_count(), VIDEO_TRANSFORM_EFFECT); + int clipIndex = sequence->clip_count(); + ta->add_effect(sequence, clipIndex, VIDEO_TRANSFORM_EFFECT); switch (panel_timeline->creatingObject) { case ADD_OBJ_TITLE: c->name = "Title"; - ta->add_effect(sequence, sequence->clip_count(), VIDEO_TEXT_EFFECT); + ta->add_effect(sequence, clipIndex, VIDEO_TEXT_EFFECT); break; case ADD_OBJ_SOLID: c->name = "Solid Color"; - ta->add_effect(sequence, sequence->clip_count(), VIDEO_SOLID_EFFECT); + ta->add_effect(sequence, clipIndex, VIDEO_SOLID_EFFECT); break; case ADD_OBJ_BARS: c->name = "Bars and Tone"; - ta->add_effect(sequence, sequence->clip_count(), VIDEO_SOLID_EFFECT); + ta->add_effect(sequence, clipIndex, VIDEO_SOLID_EFFECT); break; } undo_stack.push(ta); + // pretty hacky + if (panel_timeline->creatingObject == ADD_OBJ_BARS) { + sequence->get_clip(clipIndex)->effects.at(1)->row(0)->field(0)->set_combo_index(1); + } + panel_timeline->redraw_all_clips(true); } else if (panel_timeline->moving_proc) { repaint = true; @@ -891,7 +905,7 @@ bool subvalidate_snapping(const Ghost& g, long* frame_diff, long snap_point) { panel_timeline->snap_point = snap_point; panel_timeline->snapped = true; return true; - } else if (!g.trim_in && out_validator > -snap_range && out_validator < snap_range) { + } else if ((panel_timeline->trim_target == -1 || !g.trim_in) && out_validator > -snap_range && out_validator < snap_range) { *frame_diff -= out_validator; panel_timeline->snap_point = snap_point; panel_timeline->snapped = true;