X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Froute_time_axis.cc;h=49c49a3734399723c44e7e110bc70b2e87fe6bbe;hb=9c4f5ac000ad91b55e4cf91317b7a89f6239870e;hp=873eb171d275bf5af43fd7a503d4011624b20c03;hpb=ef94fbf11ca36fc088e58cfa5691cbca7c7a3390;p=ardour.git diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 873eb171d2..49c49a3734 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -39,7 +39,6 @@ #include #include #include -#include #include #include @@ -265,6 +264,7 @@ RouteTimeAxisView::post_construct () update_diskstream_display (); + _subplugin_menu_map.clear (); subplugin_menu.items().clear (); _route->foreach_processor (sigc::mem_fun (*this, &RouteTimeAxisView::add_processor_to_subplugin_menu)); _route->foreach_processor (sigc::mem_fun (*this, &RouteTimeAxisView::add_existing_processor_automation_curves)); @@ -392,6 +392,13 @@ RouteTimeAxisView::build_automation_action_menu () { using namespace Menu_Helpers; + /* detach subplugin_menu from automation_action_menu before we delete automation_action_menu, + otherwise bad things happen (see comment for similar case in MidiTimeAxisView::build_automation_action_menu) + */ + + detach_menu (subplugin_menu); + + _main_automation_menu_map.clear (); delete automation_action_menu; automation_action_menu = new Menu; @@ -407,11 +414,13 @@ RouteTimeAxisView::build_automation_action_menu () items.push_back (MenuElem (_("Hide All Automation"), sigc::mem_fun(*this, &RouteTimeAxisView::hide_all_automation))); + + items.push_back (SeparatorElem ()); - /* attach the plugin submenu. It may have previously been used elsewhere, so we detach it first. */ + /* Attach the plugin submenu. It may have previously been used elsewhere, + so it was detached above */ - detach_menu (subplugin_menu); - items.push_back (MenuElem (_("Plugins"), subplugin_menu)); + items.push_back (MenuElem (_("Plugins"), subplugin_menu)); items.back().set_sensitive (!subplugin_menu.items().empty()); } @@ -429,7 +438,7 @@ RouteTimeAxisView::build_display_menu () MenuList& items = display_menu->items(); display_menu->set_name ("ArdourContextMenu"); - items.push_back (MenuElem (_("Color"), sigc::mem_fun(*this, &RouteTimeAxisView::select_track_color))); + items.push_back (MenuElem (_("Color..."), sigc::mem_fun(*this, &RouteTimeAxisView::select_track_color))); items.push_back (SeparatorElem()); @@ -1676,14 +1685,15 @@ RouteTimeAxisView::show_existing_automation () /* Show our automation */ for (AutomationTracks::iterator i = _automation_tracks.begin(); i != _automation_tracks.end(); ++i) { - if (i->second->line() && i->second->line()->npoints() > 0) { + if (i->second->has_automation()) { i->second->set_marked_for_display (true); i->second->canvas_display()->show(); i->second->get_state_node()->add_property ("shown", X_("yes")); Gtk::CheckMenuItem* menu = automation_child_menu_item (i->first); - assert (menu); - menu->set_active(true); + if (menu) { + menu->set_active(true); + } } } @@ -2001,6 +2011,8 @@ RouteTimeAxisView::add_processor_to_subplugin_menu (boost::weak_ptr p items.push_back (CheckMenuElem (name)); mitem = dynamic_cast (&items.back()); + _subplugin_menu_map[*i] = mitem; + if (has_visible_automation.find((*i)) != has_visible_automation.end()) { mitem->set_active(true); } @@ -2080,6 +2092,7 @@ RouteTimeAxisView::processors_changed (RouteProcessorChange c) (*i)->valid = false; } + _subplugin_menu_map.clear (); subplugin_menu.items().clear (); _route->foreach_processor (sigc::mem_fun (*this, &RouteTimeAxisView::add_processor_to_subplugin_menu)); @@ -2364,10 +2377,15 @@ RouteTimeAxisView::set_button_names () Gtk::CheckMenuItem* RouteTimeAxisView::automation_child_menu_item (Evoral::Parameter param) { - ParameterMenuMap::iterator i = _parameter_menu_map.find (param); - if (i == _parameter_menu_map.end()) { - return 0; + ParameterMenuMap::iterator i = _main_automation_menu_map.find (param); + if (i != _main_automation_menu_map.end()) { + return i->second; + } + + i = _subplugin_menu_map.find (param); + if (i != _subplugin_menu_map.end()) { + return i->second; } - return i->second; + return 0; }