From ba7237c152cc441c657648f1b47704516b87539c Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Tue, 20 Jul 2021 13:11:33 -0500 Subject: [PATCH] Playlist UI Tweaks: Fix some bugs related to old playlists without pgroup_ids --- gtk2_ardour/route_ui.cc | 10 ++++++++-- libs/ardour/session_playlists.cc | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index d434a9ed71..ffc7c80e12 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -2508,11 +2508,10 @@ RouteUI::build_playlist_menu () string text = (*i)->name(); playlist_items.push_back (RadioMenuElem (playlist_group, text)); RadioMenuItem *item = static_cast(&playlist_items.back()); - item->signal_toggled().connect(sigc::bind (sigc::mem_fun (*this, &RouteUI::use_playlist), item, boost::weak_ptr (*i))); - if (tr->playlist()->id() == (*i)->id()) { item->set_active(); } + item->signal_toggled().connect(sigc::bind (sigc::mem_fun (*this, &RouteUI::use_playlist), item, boost::weak_ptr (*i))); } playlist_items.push_back (SeparatorElem()); @@ -2581,6 +2580,13 @@ RouteUI::select_playlist_matching (boost::weak_ptr wpl) return; } + if (track()->id() == pl->get_orig_track_id()) { + /* this playlist is one of this track's own, no need to match by pgroup-id or name */ + track()->use_playlist(track()->data_type(), pl); + return; + } + + /* Search for a matching playlist .. either by pgroup_id or name */ std::string pgrp_id = pl->pgroup_id(); boost::shared_ptr ipl = session()->playlists()->for_pgroup(pgrp_id, track()->id()); if (ipl) { diff --git a/libs/ardour/session_playlists.cc b/libs/ardour/session_playlists.cc index 122bc8a0f4..031713090a 100644 --- a/libs/ardour/session_playlists.cc +++ b/libs/ardour/session_playlists.cc @@ -189,6 +189,11 @@ SessionPlaylists::n_playlists () const boost::shared_ptr SessionPlaylists::for_pgroup (string pgroup_id, const PBD::ID& id) { + if(pgroup_id.length()==0) { + /*matching empty pgroup-id's would be meaningless*/ + return boost::shared_ptr(); + } + Glib::Threads::Mutex::Lock lm (lock); for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { @@ -213,10 +218,15 @@ SessionPlaylists::for_pgroup (string pgroup_id, const PBD::ID& id) std::vector > SessionPlaylists::playlists_for_pgroup (std::string pgroup) { - Glib::Threads::Mutex::Lock lm (lock); - vector > pl_tr; + if(pgroup.length()==0) { + /*matching empty pgroup-id's would be meaningless*/ + return pl_tr; + } + + Glib::Threads::Mutex::Lock lm (lock); + for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { if ((*i)->pgroup_id().compare(pgroup)==0) { pl_tr.push_back (*i);