[banshee] ThickClient: Add "Playing Track" submenu (bgo#726338)



commit b7eb9bb8b89c1f213b5794cd8f6101b3eecc1d31
Author: Dmitrii Petukhov <dimart sp gmail com>
Date:   Thu May 22 02:48:11 2014 +0200

    ThickClient: Add "Playing Track" submenu (bgo#726338)
    
    When some user requested to have CoverArt modification for the
    playing track in the "Edit" menu (bgo#724795), we realised that
    it was not clear at all that this menu affected just to selected
    tracks, not to the playing track. The two previous patches then
    modified the UI to include these options under a new "Selected
    Track(s)" submenu.
    
    Now, this change introduces a similar submenu (with the same
    options) but which applies only to the playing track. This only
    works for now if the track played is in the main Music library,
    and it can be extended for more sources in the future.
    
    Signed-off-by: Andrés G. Aragoneses <knocte gmail com>

 .../Banshee.Library/LibrarySource.cs               |    3 +-
 .../Banshee.Playlist/PlaylistSource.cs             |    3 +-
 .../Banshee.SmartPlaylist/SmartPlaylistSource.cs   |    1 +
 .../Banshee.Sources/DatabaseSource.cs              |    2 +-
 .../Banshee.Gui.TrackEditor/TrackEditorDialog.cs   |   16 ++
 .../Banshee.Gui/TrackActions.cs                    |  169 +++++++++++++++++++-
 .../Resources/core-ui-actions-layout.xml           |   14 ++
 .../Banshee.InternetRadio/InternetRadioSource.cs   |    2 +
 .../Banshee.PlayQueue/PlayQueueSource.cs           |    1 +
 9 files changed, 206 insertions(+), 5 deletions(-)
---
diff --git a/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs 
b/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
index 25c2f6c..0d35ae3 100644
--- a/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
@@ -62,6 +62,7 @@ namespace Banshee.Library
         {
             Properties.SetString ("GtkActionPath", "/LibraryContextMenu");
             Properties.SetString ("RemoveSelectedTracksActionLabel", Catalog.GetString ("Remove From 
Library"));
+            Properties.SetString ("RemovePlayingTrackActionLabel", Catalog.GetString ("Remove From 
Library"));
             IsLocal = true;
             base_dir_schema = CreateSchema<string> ("library-location", null, "The base directory under 
which files for this library are stored", null);
             copy_on_import = CreateSchema<bool> ("copy-on-import", false, "Copy files on import", "Copy and 
rename files to library directory when importing");
@@ -174,7 +175,7 @@ namespace Banshee.Library
             Banshee.IO.File.Copy (track.Uri, uri, false);
         }*/
 
-        protected override void AddTrack (DatabaseTrackInfo track)
+        public override void AddTrack (DatabaseTrackInfo track)
         {
             // Ignore if already have it
             if (track.PrimarySourceId == DbId)
diff --git a/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs 
b/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs
index 03c4c74..707e582 100644
--- a/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs
@@ -131,6 +131,7 @@ namespace Banshee.Playlist
         {
             Properties.SetString ("Icon.Name", "source-playlist");
             Properties.SetString ("RemoveSelectedTracksActionLabel", Catalog.GetString ("Remove From 
Playlist"));
+            Properties.SetString ("RemovePlayingTrackActionLabel", Catalog.GetString ("Remove From 
Library"));
             Properties.SetString ("UnmapSourceActionLabel", Catalog.GetString ("Delete Playlist"));
         }
 
@@ -238,7 +239,7 @@ namespace Banshee.Playlist
             OnTracksAdded ();
         }
 
-        protected override void AddTrack (DatabaseTrackInfo track)
+        public override void AddTrack (DatabaseTrackInfo track)
         {
             AddTrack (track.TrackId);
         }
diff --git a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs 
b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
index 878e33d..562fae8 100644
--- a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
+++ b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
@@ -252,6 +252,7 @@ namespace Banshee.SmartPlaylist
             Properties.SetString ("Icon.Name", "source-smart-playlist");
             Properties.SetString ("SourcePropertiesActionLabel", properties_label);
             Properties.SetString ("UnmapSourceActionLabel", Catalog.GetString ("Delete Smart Playlist"));
+            Properties.SetString ("RemovePlayingTrackActionLabel", Catalog.GetString ("Remove From 
Library"));
         }
 
 #endregion
diff --git a/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs 
b/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
index 12c0514..90aae7c 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
@@ -692,7 +692,7 @@ namespace Banshee.Sources
             Log.ErrorFormat ("AddTrackRange not implemented by {0}", this);
         }
 
-        protected virtual void AddTrack (DatabaseTrackInfo track)
+        public virtual void AddTrack (DatabaseTrackInfo track)
         {
             Log.ErrorFormat ("AddTrack not implemented by {0}", this);
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs 
b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs
index ba34025..c606948 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs
@@ -652,11 +652,27 @@ namespace Banshee.Gui.TrackEditor
             Run (model, selection, EditorMode.Edit);
         }
 
+        public static void RunEdit (TrackInfo track)
+        {
+            var model = new MemoryTrackListModel ();
+            model.Add (track);
+            model.Selection.SelectAll ();
+            Run (model, model.Selection, EditorMode.Edit);
+        }
+
         public static void RunView (TrackListModel model, Selection selection, bool readonlyTabs)
         {
             Run (model, selection, EditorMode.View, readonlyTabs);
         }
 
+        public static void RunView (TrackInfo track, bool readonlyTabs)
+        {
+            var model = new MemoryTrackListModel ();
+            model.Add (track);
+            model.Selection.SelectAll ();
+            Run (model, model.Selection, EditorMode.View, readonlyTabs);
+        }
+
         public static void Run (TrackListModel model, Selection selection, EditorMode mode)
         {
             Run (new TrackEditorDialog (model, selection, mode));
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs 
b/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs
index 10cf018..59b4f7e 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs
@@ -52,6 +52,9 @@ namespace Banshee.Gui
     public class TrackActions : BansheeActionGroup
     {
         private RatingActionProxy selected_tracks_rating_proxy;
+        private RatingActionProxy playing_track_rating_proxy;
+
+        private bool chosen_from_playing_track_submenu;
 
         private static readonly string [] require_selection_actions = new string [] {
             // Selected Track(s) >
@@ -109,6 +112,43 @@ namespace Banshee.Gui
             Add (new ActionEntry [] {
 
                 /*
+                 * Playing Track ActionsEntries
+                 */
+
+                new ActionEntry ("PlayingTrackAction", null,
+                    Catalog.GetString ("Playing Track"), "",
+                    Catalog.GetString ("Options for playing track"),
+                    (o, e) => { ResetRating (); }),
+
+                new ActionEntry ("AddPlayingTrackToPlaylistAction", null,
+                    Catalog.GetString ("Add _to Playlist"), "",
+                    Catalog.GetString ("Append playing items to playlist or create new playlist from playing 
track"),
+                    OnAddPlayingTrackToPlaylistMenu),
+
+                new ActionEntry ("RatePlayingTrackAction", null,
+                    String.Empty, null, null, OnRatePlayingTrack),
+
+                new ActionEntry ("PlayingTrackEditorAction", Stock.Edit,
+                    Catalog.GetString ("_Edit Track Information"), "E",
+                    Catalog.GetString ("Edit information on playing track"), OnPlayingTrackEditor),
+
+                new ActionEntry ("RemovePlayingTrackAction", Stock.Remove,
+                    Catalog.GetString ("_Remove"), "",
+                    Catalog.GetString ("Remove playing track from this source"), OnRemovePlayingTrack),
+
+                new ActionEntry ("DeletePlayingTrackFromDriveAction", null,
+                    Catalog.GetString ("_Delete From Drive"), "",
+                    Catalog.GetString ("Permanently delete playing item from medium"), 
OnDeletePlayingTrackFromDrive),
+
+                new ActionEntry ("OpenPlayingTrackFolderAction", null,
+                    Catalog.GetString ("_Open Containing Folder"), "",
+                    Catalog.GetString ("Open the folder that contains playing item"), 
OnOpenPlayingTrackFolder),
+
+                new ActionEntry ("PlayingTrackPropertiesAction", Stock.Properties,
+                    Catalog.GetString ("Properties"), "",
+                    Catalog.GetString ("View information on playing track"), OnPlayingTrackProperties),
+
+                /*
                  * Selected Track(s) ActionEntries
                  */
 
@@ -190,7 +230,9 @@ namespace Banshee.Gui
 
             Actions.GlobalActions["EditMenuAction"].Activated += HandleEditMenuActivated;
             ServiceManager.SourceManager.ActiveSourceChanged += HandleActiveSourceChanged;
+            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, PlayerEvent.StateChange);
 
+            this["AddPlayingTrackToPlaylistAction"].HideIfEmpty   = false;
             this["AddSelectedTracksToPlaylistAction"].HideIfEmpty = false;
             this["PlayTrack"].StockId = Gtk.Stock.MediaPlay;
         }
@@ -226,12 +268,25 @@ namespace Banshee.Gui
             });
         }
 
+        private void OnPlayerEvent (PlayerEventArgs args)
+        {
+            ThreadAssist.ProxyToMain (() => {
+                UpdateActions ();
+            });
+        }
+
         private void HandleActionsChanged (object sender, EventArgs args)
         {
-            if (Actions.UIManager.GetAction ("/MainMenu/EditMenu/SelectedTracks") != null) {
+            if (Actions.UIManager.GetAction ("/MainMenu/EditMenu/SelectedTracks") != null &&
+                Actions.UIManager.GetAction ("/MainMenu/EditMenu/PlayingTrack") != null) {
+
                 selected_tracks_rating_proxy = new RatingActionProxy (Actions.UIManager, 
this["RateSelectedTracksAction"]);
+                playing_track_rating_proxy = new RatingActionProxy (Actions.UIManager, 
this["RatePlayingTrackAction"]);
+
+                playing_track_rating_proxy.AddPath ("/MainMenu/EditMenu/PlayingTrack", "AddToPlaylist");
                 selected_tracks_rating_proxy.AddPath ("/MainMenu/EditMenu/SelectedTracks", "AddToPlaylist");
                 selected_tracks_rating_proxy.AddPath ("/TrackContextMenu", "AddToPlaylist");
+
                 Actions.UIManager.ActionsChanged -= HandleActionsChanged;
             }
         }
@@ -247,6 +302,7 @@ namespace Banshee.Gui
         private void HandleEditMenuActivated (object sender, EventArgs args)
         {
             // inside the "Edit" menu it's a bit redundant to have a label that starts as "Edit Track..."
+            this["PlayingTrackEditorAction"].Label = Catalog.GetString ("Track _Information");
             this["SelectedTracksEditorAction"].Label = Catalog.GetString ("Track _Information");
             if (Selection.Count > 1) {
                 this ["SelectedTracksAction"].Label = Catalog.GetString ("Selected Tracks");
@@ -312,10 +368,15 @@ namespace Banshee.Gui
                 }
 
                 var selection = Selection;
+                var playing_track = ServiceManager.PlayerEngine.CurrentTrack;
+                var playback_source = (DatabaseSource)ServiceManager.PlaybackController.Source;
                 int count = selection.Count;
                 Sensitive = Visible = true;
                 bool has_selection = count > 0;
                 bool has_single_selection = count == 1;
+                bool is_playing_or_paused = ServiceManager.PlayerEngine.CurrentState == PlayerState.Playing 
||
+                                            ServiceManager.PlayerEngine.CurrentState == PlayerState.Paused;
+                bool is_idle = ServiceManager.PlayerEngine.CurrentState == PlayerState.Idle;
 
                 foreach (string action in require_selection_actions) {
                     this[action].Sensitive = has_selection;
@@ -326,6 +387,16 @@ namespace Banshee.Gui
                 );
 
                 this["SelectAllAction"].Sensitive = track_source.Count > 0 && !selection.AllSelected;
+
+                UpdateAction ("PlayingTrackAction", !is_idle && playing_track is DatabaseTrackInfo, 
is_playing_or_paused, null);
+                UpdateAction ("AddPlayingTrackToPlaylistAction", source is MusicLibrarySource, 
is_playing_or_paused, null);
+                UpdateAction ("RatePlayingTrackAction", playback_source.HasEditableTrackProperties, 
is_playing_or_paused, null);
+                UpdateAction ("PlayingTrackPropertiesAction", playback_source.HasViewableTrackProperties, 
is_playing_or_paused, source);
+                UpdateAction ("PlayingTrackEditorAction", playback_source.HasEditableTrackProperties, 
is_playing_or_paused, source);
+                UpdateAction ("RemovePlayingTrackAction", playback_source.CanRemoveTracks, 
is_playing_or_paused, source);
+                UpdateAction ("DeletePlayingTrackFromDriveAction", playback_source.CanDeleteTracks, 
is_playing_or_paused, source);
+                UpdateAction ("OpenPlayingTrackFolderAction", playback_source.CanDeleteTracks, 
is_playing_or_paused, source);
+
                 UpdateAction ("SelectedTracksAction", has_selection, has_selection, null);
                 UpdateAction ("AddSelectedTracksToPlaylistAction", in_database && primary_source != null &&
                     primary_source.SupportsPlaylists && !primary_source.PlaylistsReadOnly, has_selection, 
null);
@@ -343,6 +414,8 @@ namespace Banshee.Gui
                     primary_source.StorageName != null) {
                     this["DeleteSelectedTracksFromDriveAction"].Label = String.Format (
                         Catalog.GetString ("_Delete From \"{0}\""), primary_source.StorageName);
+                    this["DeletePlayingTrackFromDriveAction"].Label = String.Format (
+                        Catalog.GetString ("_Delete From \"{0}\""), primary_source.StorageName);
                 }
 
                 if (FilterFocused) {
@@ -365,6 +438,12 @@ namespace Banshee.Gui
                     }
                 }
                 selected_tracks_rating_proxy.Reset (rating);
+
+                var playing_track = ServiceManager.PlayerEngine.CurrentTrack as TrackInfo;
+                if (playing_track != null) {
+                    rating = playing_track.Rating;
+                    playing_track_rating_proxy.Reset (rating);
+                }
             }
         }
 
@@ -406,6 +485,16 @@ namespace Banshee.Gui
             return false;
         }
 
+        private void OnPlayingTrackProperties (object o, EventArgs args)
+        {
+            var track = ServiceManager.PlayerEngine.CurrentTrack as TrackInfo;
+            if (track != null && current_source != null && !RunSourceOverrideHandler 
("PlayingTrackPropertiesActionHandler")) {
+                var s = current_source as Source;
+                var readonly_tabs = s != null && !s.HasEditableTrackProperties;
+                TrackEditor.TrackEditorDialog.RunView (track, readonly_tabs);
+            }
+        }
+
         private void OnSelectedTracksProperties (object o, EventArgs args)
         {
             if (current_source != null && !RunSourceOverrideHandler 
("SelectedTracksPropertiesActionHandler")) {
@@ -415,6 +504,14 @@ namespace Banshee.Gui
             }
         }
 
+        private void OnPlayingTrackEditor (object o, EventArgs args)
+        {
+            var track = ServiceManager.PlayerEngine.CurrentTrack as TrackInfo;
+            if (track != null && current_source != null && !RunSourceOverrideHandler 
("PlayingTrackEditorActionHandler")) {
+                TrackEditor.TrackEditorDialog.RunEdit (track);
+            }
+        }
+
         private void OnSelectedTracksEditor (object o, EventArgs args)
         {
             if (current_source != null && !RunSourceOverrideHandler ("SelectedTracksEditorActionHandler")) {
@@ -436,9 +533,22 @@ namespace Banshee.Gui
             }
         }
 
+        // TODO This function works only for music library source now
+        //      but it should act on a source where a track is playing.
+        private void OnAddPlayingTrackToPlaylistMenu (object o, EventArgs args)
+        {
+            List<Source> children;
+            chosen_from_playing_track_submenu = true;
+            lock (ServiceManager.SourceManager.MusicLibrary.Children) {
+                children = new List<Source> (ServiceManager.SourceManager.MusicLibrary.Children);
+            }
+            OnAddToPlaylistMenu (o, children);
+        }
+
         private void OnAddSelectedTracksToPlaylistMenu (object o, EventArgs args)
         {
             List<Source> children;
+            chosen_from_playing_track_submenu = false;
             lock (ActivePrimarySource.Children) {
                 children = new List<Source> (ActivePrimarySource.Children);
             }
@@ -500,12 +610,32 @@ namespace Banshee.Gui
         private void AddToPlaylist (PlaylistSource playlist)
         {
             if (!FilterFocused) {
-                playlist.AddSelectedTracks (ActiveSource);
+                var track = ServiceManager.PlayerEngine.CurrentTrack as DatabaseTrackInfo;
+                if (chosen_from_playing_track_submenu && track != null) {
+                    playlist.AddTrack (track);
+                } else {
+                    playlist.AddSelectedTracks (ActiveSource);
+                }
             } else {
                 playlist.AddAllTracks (ActiveSource);
             }
         }
 
+        private void OnRemovePlayingTrack (object o, EventArgs args)
+        {
+            var playback_src = ServiceManager.PlaybackController.Source as DatabaseSource;
+            var track = ServiceManager.PlayerEngine.CurrentTrack as DatabaseTrackInfo;
+
+            if (playback_src != null && track != null) {
+                if (!ConfirmRemove (playback_src, false, 1)) {
+                    return;
+                }
+                if (playback_src != null && playback_src.CanRemoveTracks) {
+                    playback_src.RemoveTrack (track);
+                }
+            }
+        }
+
         private void OnRemoveSelectedTracks (object o, EventArgs args)
         {
             ITrackModelSource source = ActiveSource as ITrackModelSource;
@@ -536,6 +666,15 @@ namespace Banshee.Gui
             }
         }
 
+        private void OnOpenPlayingTrackFolder (object o, EventArgs args)
+        {
+            var track = ServiceManager.PlayerEngine.CurrentTrack as TrackInfo;
+            if (track != null) {
+                var path = System.IO.Path.GetDirectoryName (track.Uri.AbsolutePath);
+                OpenContainingFolder (path);
+            }
+        }
+
         private void OnOpenSelectedTracksFolder (object o, EventArgs args)
         {
             var source = ActiveSource as ITrackModelSource;
@@ -576,6 +715,24 @@ namespace Banshee.Gui
             }
         }
 
+        private void OnDeletePlayingTrackFromDrive (object o, EventArgs args)
+        {
+            var playback_src = ServiceManager.PlaybackController.Source as DatabaseSource;
+            var track = ServiceManager.PlayerEngine.CurrentTrack as DatabaseTrackInfo;
+
+            if (playback_src != null && track != null) {
+                if (!ConfirmRemove (playback_src, true, 1)) {
+                    return;
+                }
+
+                if (playback_src != null && playback_src.CanDeleteTracks) {
+                    var selection = new Hyena.Collections.Selection ();
+                    selection.Select (playback_src.TrackModel.IndexOf (track));
+                    playback_src.DeleteTracks (selection);
+                }
+            }
+        }
+
         private void OnDeleteSelectedTracksFromDrive (object o, EventArgs args)
         {
             ITrackModelSource source = ActiveSource as ITrackModelSource;
@@ -596,6 +753,14 @@ namespace Banshee.Gui
             });
         }
 
+        private void OnRatePlayingTrack (object o, EventArgs args)
+        {
+            var track = ServiceManager.PlayerEngine.CurrentTrack as DatabaseTrackInfo;
+            if (track != null) {
+                track.SavedRating = playing_track_rating_proxy.LastRating;
+            }
+        }
+
         private void OnSearchForSameArtist (object o, EventArgs args)
         {
             if (current_source != null) {
diff --git a/src/Core/Banshee.ThickClient/Resources/core-ui-actions-layout.xml 
b/src/Core/Banshee.ThickClient/Resources/core-ui-actions-layout.xml
index 30f8990..035dba1 100644
--- a/src/Core/Banshee.ThickClient/Resources/core-ui-actions-layout.xml
+++ b/src/Core/Banshee.ThickClient/Resources/core-ui-actions-layout.xml
@@ -56,6 +56,20 @@
     </menu>
 
     <menu name="EditMenu" action="EditMenuAction">
+      <menu name="PlayingTrack" action="PlayingTrackAction">
+        <placeholder name="AboveAddToPlaylist"/>
+        <menu name="AddToPlaylist" action="AddPlayingTrackToPlaylistAction"></menu>
+        <placeholder name="BelowAddToPlaylist"/>
+        <menuitem name="TrackEditor" action="PlayingTrackEditorAction"/>
+        <separator/>
+        <menuitem name="RemoveTracks" action="RemovePlayingTrackAction"/>
+        <menuitem name="DeleteTracksFromDrive" action="DeletePlayingTrackFromDriveAction"/>
+        <separator/>
+        <menuitem name="OpenContainingFolder" action="OpenPlayingTrackFolderAction"/>
+        <separator/>
+        <menuitem name="TrackProperties" action="PlayingTrackPropertiesAction"/>
+      </menu>
+      <separator/>
       <menu name="SelectedTracks" action="SelectedTracksAction">
         <placeholder name="AboveAddToPlaylist"/>
         <menu name="AddToPlaylist" action="AddSelectedTracksToPlaylistAction"></menu>
diff --git a/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSource.cs 
b/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSource.cs
index 3607d26..4624e1f 100644
--- a/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSource.cs
+++ b/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSource.cs
@@ -78,6 +78,8 @@ namespace Banshee.InternetRadio
             Properties.Set<ISourceContents> ("Nereid.SourceContents", new 
LazyLoadSourceContents<InternetRadioSourceContents> ());
 
             Properties.Set<string> ("SearchEntryDescription", Catalog.GetString ("Search your stations"));
+            Properties.SetString ("RemovePlayingTrackActionLabel", Catalog.GetString ("Remove From 
Library"));
+            Properties.SetString ("DeletePlayingTrackFromDriveActionLabel", Catalog.GetString ("Delete From 
Drive"));
             Properties.SetString ("SelectedTracksEditorActionLabel", Catalog.GetString ("Edit Station"));
             Properties.Set<InvokeHandler> ("SelectedTracksEditorActionHandler", delegate {
                 var track_actions = ServiceManager.Get<InterfaceActionService> ().TrackActions;
diff --git a/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs 
b/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
index 37727da..a4d7d33 100644
--- a/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
+++ b/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
@@ -86,6 +86,7 @@ namespace Banshee.PlayQueue
             Order = 20;
             Properties.SetString ("Icon.Name", "source-playlist");
             Properties.SetString ("RemoveSelectedTracksActionLabel", Catalog.GetString ("Remove From Play 
Queue"));
+            Properties.SetString ("RemovePlayingTrackActionLabel", Catalog.GetString ("Remove From 
Library"));
 
             DatabaseTrackModel.ForcedSortQuery = "CorePlaylistEntries.ViewOrder ASC, 
CorePlaylistEntries.EntryID ASC";
             DatabaseTrackModel.CanReorder = true;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]