diff --git a/src/gui/widgets/timeline-widget.cpp b/src/gui/widgets/timeline-widget.cpp index 3ab58ee88..9859a3def 100644 --- a/src/gui/widgets/timeline-widget.cpp +++ b/src/gui/widgets/timeline-widget.cpp @@ -296,11 +296,6 @@ TimelineWidget::update_tracks() // Create timeline tracks from all the model tracks create_timeline_tracks(); - // Update the header container - REQUIRE(headerContainer != NULL); - headerContainer->show_all_children(); - headerContainer->update_headers(); - // Update the layout helper layoutHelper.clone_tree_from_sequence(); layoutHelper.update_layout(); @@ -316,6 +311,10 @@ TimelineWidget::create_timeline_tracks() BOOST_FOREACH(shared_ptr child, sequence->get_child_tracks()) create_timeline_tracks_from_branch(child); + + // Update the header container + REQUIRE(headerContainer != NULL); + headerContainer->update_headers(); } void diff --git a/src/gui/widgets/timeline/timeline-header-container.cpp b/src/gui/widgets/timeline/timeline-header-container.cpp index a849fcf4b..8f5973789 100644 --- a/src/gui/widgets/timeline/timeline-header-container.cpp +++ b/src/gui/widgets/timeline/timeline-header-container.cpp @@ -75,9 +75,20 @@ TimelineHeaderContainer::TimelineHeaderContainer( void TimelineHeaderContainer::update_headers() { - // Add fresh headers - BOOST_FOREACH( shared_ptr model_track, get_tracks() ) - set_parent_recursive(model_track); + // Ensure headers are parented correctly + pair, shared_ptr > pair; + BOOST_FOREACH( pair, timelineWidget.trackMap ) + { + // Set the header's parent widget + Widget &widget = lookup_timeline_track(pair.first)-> + get_header_widget(); + + const Container *parent = widget.get_parent(); + if(parent == NULL) // Is the header unparented? + widget.set_parent(*this); + ENSURE(widget.get_parent() == this); + } + } void @@ -382,26 +393,6 @@ TimelineHeaderContainer::layout_headers() queue_draw (); } -void -TimelineHeaderContainer::set_parent_recursive( - boost::shared_ptr model_track) -{ - // Set the header's parent widget - Widget &widget = lookup_timeline_track(model_track)-> - get_header_widget(); - - const Container *parent = widget.get_parent(); - if(parent == NULL) // Is the header unparented? - widget.set_parent(*this); - else if(parent != this) // The header is parented by another container - widget.reparent(*this); - - // Recurse through all the children - BOOST_FOREACH( shared_ptr child, - model_track->get_child_tracks() ) - set_parent_recursive(child); -} - void TimelineHeaderContainer::forall_vfunc_recursive( shared_ptr model_track, GtkCallback callback, diff --git a/src/gui/widgets/timeline/timeline-header-container.hpp b/src/gui/widgets/timeline/timeline-header-container.hpp index bd348792c..0ba97d0fe 100644 --- a/src/gui/widgets/timeline/timeline-header-container.hpp +++ b/src/gui/widgets/timeline/timeline-header-container.hpp @@ -152,14 +152,6 @@ private: * stacking etc. */ void layout_headers(); - - /** - * Recursively sets all the track header widgets to be child widgets - * of this widget. - * @param track The parent track object which will be recursed into. - **/ - void set_parent_recursive(boost::shared_ptr const - model_track); /** * Recursively calls a callback on all the header widgets in a branch.