diff --git a/src/gui/widgets/timeline/timeline-header-container.cpp b/src/gui/widgets/timeline/timeline-header-container.cpp index dfc81bef4..c4e189081 100644 --- a/src/gui/widgets/timeline/timeline-header-container.cpp +++ b/src/gui/widgets/timeline/timeline-header-container.cpp @@ -201,14 +201,14 @@ bool TimelineHeaderContainer::on_motion_notify_event ( // Are we beginning to drag a header? if((event->state & GDK_BUTTON1_MASK) && hoveringTrack && - !layout.get_dragging_track()) + !layout.is_dragging_track()) { begin_drag(); return result; } // Are we currently dragging? - if(layout.get_dragging_track()) + if(layout.is_dragging_track()) { // Forward the message to the layout manager layout.drag_to_point(mousePoint); @@ -346,9 +346,6 @@ TimelineHeaderContainer::layout_headers() timelineWidget.layoutHelper; const TimelineLayoutHelper::TrackTree &layout_tree = layout_helper.get_layout_tree(); - - shared_ptr dragging_track = - layout_helper.get_dragging_track(); TimelineLayoutHelper::TrackTree::pre_order_iterator iterator; for(iterator = ++layout_tree.begin(); // ++ so that we skip the sequence root @@ -416,7 +413,7 @@ TimelineHeaderContainer::end_drag(bool apply) TimelineLayoutHelper &layout = timelineWidget.layoutHelper; // Has the user been dragging? - if(layout.get_dragging_track()) + if(layout.is_dragging_track()) layout.end_dragging_track(apply); // Reset the arrow as a cursor diff --git a/src/gui/widgets/timeline/timeline-layout-helper.cpp b/src/gui/widgets/timeline/timeline-layout-helper.cpp index 5a7d05e83..4df9b0c98 100644 --- a/src/gui/widgets/timeline/timeline-layout-helper.cpp +++ b/src/gui/widgets/timeline/timeline-layout-helper.cpp @@ -45,6 +45,8 @@ TimelineLayoutHelper::TimelineLayoutHelper(TimelineWidget &owner) : dragBranchHeight(0), animating(false) { + // Init draggingTrackIter into a non-dragging state + draggingTrackIter.node = NULL; } void @@ -134,26 +136,27 @@ shared_ptr TimelineLayoutHelper::begin_dragging_track( const Gdk::Point &mouse_point) { - draggingTrack = header_from_point(mouse_point); - if(!draggingTrack) + shared_ptr dragging_track = + header_from_point(mouse_point); + if(!dragging_track) return shared_ptr(); dragPoint = Gdk::Point(mouse_point.get_x(), mouse_point.get_y() + timelineWidget.get_y_scroll_offset()); - const Gdk::Rectangle &rect = headerBoxes[draggingTrack]; + const Gdk::Rectangle &rect = headerBoxes[dragging_track]; dragStartOffset = Gdk::Point( dragPoint.get_x() - rect.get_x(), dragPoint.get_y() - rect.get_y()); const shared_ptr model_track = - draggingTrack->get_model_track(); + dragging_track->get_model_track(); draggingTrackIter = iterator_from_track(model_track); dragBranchHeight = measure_branch_height(draggingTrackIter); draggingDrop.relation = None; - return draggingTrack; + return dragging_track; } void @@ -162,15 +165,15 @@ TimelineLayoutHelper::end_dragging_track(bool apply) if(apply) apply_drop_to_model_tree(draggingDrop); - draggingTrack.reset(); + draggingTrackIter.node = NULL; clone_tree_from_sequence(); update_layout(); } -boost::shared_ptr -TimelineLayoutHelper::get_dragging_track() const +bool +TimelineLayoutHelper::is_dragging_track() const { - return draggingTrack; + return draggingTrackIter.node != NULL; } TimelineLayoutHelper::TrackTree::pre_order_iterator @@ -484,8 +487,9 @@ TimelineLayoutHelper::layout_headers_recursive( { REQUIRE(depth >= 0); + const bool dragging = is_dragging_track(); int child_offset = 0; - + TrackTree::sibling_iterator iterator; for(iterator = layoutTree.begin(parent_iterator); iterator != layoutTree.end(parent_iterator); @@ -498,8 +502,11 @@ TimelineLayoutHelper::layout_headers_recursive( REQUIRE(model_track); shared_ptr timeline_track = lookup_timeline_track(model_track); - - const bool being_dragged = (timeline_track == draggingTrack); + + // Is this the root track of a dragging branch? + bool being_dragged = false; + if(dragging) + being_dragged = (model_track == *draggingTrackIter); // Is the track going to be shown? if(parent_expanded) diff --git a/src/gui/widgets/timeline/timeline-layout-helper.hpp b/src/gui/widgets/timeline/timeline-layout-helper.hpp index 5233a801e..18463af49 100644 --- a/src/gui/widgets/timeline/timeline-layout-helper.hpp +++ b/src/gui/widgets/timeline/timeline-layout-helper.hpp @@ -132,7 +132,7 @@ public: void end_dragging_track(bool apply); - boost::shared_ptr get_dragging_track() const; + bool is_dragging_track() const; TrackTree::pre_order_iterator get_dragging_track_iter() const; @@ -275,9 +275,7 @@ protected: int totalHeight; TrackTree::pre_order_iterator draggingTrackIter; - - boost::shared_ptr draggingTrack; - + Gdk::Point dragStartOffset; Gdk::Point dragPoint;