private void OnAddToPlaylistMenu (object o, EventArgs args)
{
Source active_source = ServiceManager.SourceManager.ActiveSource;
List<Source> children;
lock (ActivePrimarySource.Children) {
children = new List<Source> (ActivePrimarySource.Children);
}
// TODO find just the menu that was activated instead of modifying all proxies
foreach (Widget proxy_widget in (o as Gtk.Action).Proxies) {
MenuItem menu = proxy_widget as MenuItem;
if (menu == null)
continue;
Menu submenu = new Menu ();
menu.Submenu = submenu;
submenu.Append (this ["AddToNewPlaylistAction"].CreateMenuItem ());
bool separator_added = false;
foreach (Source child in children) {
PlaylistSource playlist = child as PlaylistSource;
if (playlist != null) {
if (!separator_added) {
submenu.Append (new SeparatorMenuItem ());
separator_added = true;
}
PlaylistMenuItem item = new PlaylistMenuItem (playlist);
item.Image = new Gtk.Image ("playlist-source", IconSize.Menu);
item.Activated += OnAddToExistingPlaylist;
item.Sensitive = playlist != active_source;
submenu.Append (item);
}
}
submenu.ShowAll ();
}
}