X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_mixer.cc;h=46b05a20f4e7dfe7929f81d11413a1c2681b7da8;hb=a7f4f660956250cc98cc519321ad5b8e715f9d0f;hp=618d59455ef87e89803a63c30481407c604ecd0c;hpb=762b02bc9586b06665564b8170bb9b274c39df94;p=ardour.git diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc index 618d59455e..46b05a20f4 100644 --- a/gtk2_ardour/editor_mixer.cc +++ b/gtk2_ardour/editor_mixer.cc @@ -21,9 +21,9 @@ #include #include -#include +#include "pbd/enumwriter.h" -#include +#include "ardour/audioengine.h" #include "editor.h" #include "mixer_strip.h" @@ -31,9 +31,13 @@ #include "selection.h" #include "audio_time_axis.h" #include "actions.h" +#include "editor_routes.h" +#include "editor_route_groups.h" +#include "editor_regions.h" #include "i18n.h" +using namespace std; using namespace Gtkmm2ext; using namespace PBD; @@ -78,7 +82,7 @@ Editor::show_editor_mixer (bool yn) if (yn) { if (selection->tracks.empty()) { - + if (track_views.empty()) { show_editor_mixer_when_tracks_arrive = true; return; @@ -94,7 +98,6 @@ Editor::show_editor_mixer (bool yn) } } else { - sort_track_selection (); for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { @@ -120,7 +123,7 @@ Editor::show_editor_mixer (bool yn) current_mixer_strip->set_route (r); if (created) { - current_mixer_strip->set_width (editor_mixer_strip_width, (void*) this); + current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this); } } @@ -183,7 +186,6 @@ void Editor::set_selected_mixer_strip (TimeAxisView& view) { RouteTimeAxisView* at; - bool show = false; bool created; if (!session || (at = dynamic_cast(&view)) == 0) { @@ -191,6 +193,7 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) } Glib::RefPtr act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); + if (act) { Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); if (!tact || !tact->get_active()) { @@ -212,19 +215,11 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) return; } - if (current_mixer_strip->get_parent()) { - show = true; - } - - current_mixer_strip->set_route (at->route()); - if (created) { - current_mixer_strip->set_width (editor_mixer_strip_width, (void*) this); + current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this); } - if (show) { - show_editor_mixer (true); - } + current_mixer_strip->set_route (at->route()); } double current = 0.0; @@ -232,6 +227,14 @@ double current = 0.0; void Editor::update_current_screen () { + if (_pending_locate_request) { + /* we don't update things when there's a pending locate request, otherwise + when the editor requests a locate there is a chance that this method + will move the playhead before the locate request is processed, causing + a visual glitch. */ + return; + } + if (session && session->engine().running()) { nframes64_t const frame = session->audible_frame(); @@ -292,7 +295,6 @@ Editor::update_current_screen () } } else { - if (frame != last_update_frame) { playhead_cursor->set_position (frame); } @@ -358,30 +360,23 @@ Editor::session_going_away () entered_regionview = 0; entered_track = 0; last_update_frame = 0; - drag_info.item = 0; + _drag = 0; playhead_cursor->canvas_item.hide (); /* hide all tracks */ - hide_all_tracks (false); + _routes->hide_all_tracks (false); /* rip everything out of the list displays */ - region_list_display.set_model (Glib::RefPtr(0)); - route_list_display.set_model (Glib::RefPtr(0)); - named_selection_display.set_model (Glib::RefPtr(0)); - edit_group_display.set_model (Glib::RefPtr(0)); + _regions->clear (); + _routes->clear (); + _route_groups->clear (); - region_list_model->clear (); - route_display_model->clear (); + named_selection_display.set_model (Glib::RefPtr(0)); named_selection_model->clear (); - group_model->clear (); - - region_list_display.set_model (region_list_model); - route_list_display.set_model (route_display_model); named_selection_display.set_model (named_selection_model); - edit_group_display.set_model (group_model); edit_point_clock_connection_a.disconnect(); edit_point_clock_connection_b.disconnect(); @@ -400,12 +395,16 @@ Editor::session_going_away () delete current_bbt_points; current_bbt_points = 0; - - /* mixer strip will be deleted all by itself - when its route is deleted. - */ - - current_mixer_strip = 0; + + /* get rid of any existing editor mixer strip */ + + if (current_mixer_strip) { + if (current_mixer_strip->get_parent() != 0) { + global_hpacker.remove (*current_mixer_strip); + } + delete current_mixer_strip; + current_mixer_strip = 0; + } WindowTitle title(Glib::get_application_name()); title += _("Editor"); @@ -419,7 +418,7 @@ void Editor::maybe_add_mixer_strip_width (XMLNode& node) { if (current_mixer_strip) { - node.add_property ("mixer-width", enum_2_string (current_mixer_strip->get_width())); + node.add_property ("mixer-width", enum_2_string (current_mixer_strip->get_width_enum())); } }