[rhythmbox] playlist: add 'remove from playlist' action for playlist sources



commit a6369fdf542df71e50f49af08c29a800b6c7cca8
Author: Jonathan Matthew <jonathan d14n org>
Date:   Wed Jan 13 23:01:13 2010 +1000

    playlist: add 'remove from playlist' action for playlist sources
    
    Removing entries from playlists is neither 'remove' as it's used
    elsewhere, nor 'delete', so it deserves its own description.

 data/ui/rhythmbox-ui.xml     |    4 ++--
 shell/rb-playlist-manager.c  |    2 +-
 sources/rb-playlist-source.c |   34 ++++++++++++++++++++++++++++++++++
 3 files changed, 37 insertions(+), 3 deletions(-)
---
diff --git a/data/ui/rhythmbox-ui.xml b/data/ui/rhythmbox-ui.xml
index 86ea706..5429fb4 100644
--- a/data/ui/rhythmbox-ui.xml
+++ b/data/ui/rhythmbox-ui.xml
@@ -149,8 +149,8 @@
     </menu>
     <menuitem name="CopyPlaylistPopup" action="EditCopy"/>
     <menuitem name="CutPlaylistPopup" action="EditCut"/>
-    <menuitem name="DeletePlaylistPopup" action="EditDelete"/>
     <separator/>
+    <menuitem name="RemoveFromPlaylistPopup" action="RemoveFromPlaylist"/>
     <menuitem name="MovetoTrashPlaylistPopup" action="EditMovetoTrash"/>
     <separator/>
     <placeholder name="PluginPlaceholder"/>
@@ -159,7 +159,7 @@
   </popup>
 
   <popup name="QueuePlaylistViewPopup">
-    <menuitem name="DeletePlaylistPopup" action="EditDelete"/>
+    <menuitem name="RemoveFromPlaylistPopup" action="RemoveFromPlaylist"/>
     <menuitem name="ShufflePlaylistPopup" action="ShuffleQueue"/>
     <menuitem name="SaveQueuePopup" action="MusicPlaylistSavePlaylist"/>
     <separator/>
diff --git a/shell/rb-playlist-manager.c b/shell/rb-playlist-manager.c
index beb361b..be41742 100644
--- a/shell/rb-playlist-manager.c
+++ b/shell/rb-playlist-manager.c
@@ -416,7 +416,7 @@ rb_playlist_manager_set_uimanager (RBPlaylistManager *mgr,
 	mgr->priv->uimanager = uimanager;
 
 	if (mgr->priv->actiongroup == NULL) {
-		mgr->priv->actiongroup = gtk_action_group_new ("PlaylistActions");
+		mgr->priv->actiongroup = gtk_action_group_new ("PlaylistManagerActions");
 		gtk_action_group_set_translation_domain (mgr->priv->actiongroup,
 							 GETTEXT_PACKAGE);
 		gtk_action_group_add_actions (mgr->priv->actiongroup,
diff --git a/sources/rb-playlist-source.c b/sources/rb-playlist-source.c
index 7f1aaaf..7b2bbc0 100644
--- a/sources/rb-playlist-source.c
+++ b/sources/rb-playlist-source.c
@@ -118,13 +118,25 @@ static void rb_playlist_source_songs_sort_order_changed_cb (RBEntryView *view,
 						RBStaticPlaylistSource *source);
 static char *rb_playlist_source_make_sorting_key (RBPlaylistSource *source);
 
+static void remove_from_playlist_cmd (GtkAction *action, RBSource *source);
+static char *impl_get_delete_action (RBSource *source);
+
 #define CONF_STATE_SORTING_PREFIX CONF_PREFIX "/state/sorting/"
 #define PLAYLIST_SOURCE_SONGS_POPUP_PATH "/PlaylistViewPopup"
 #define PLAYLIST_SOURCE_POPUP_PATH "/PlaylistSourcePopup"
 
+static GtkActionEntry rb_playlist_source_actions [] =
+{
+	{ "RemoveFromPlaylist", GTK_STOCK_REMOVE, N_("Remove From Playlist"), "Delete",
+	  N_("Remove each selected song from the playlist"),
+	  G_CALLBACK (remove_from_playlist_cmd) },
+};
+
+
 struct RBPlaylistSourcePrivate
 {
 	RhythmDB *db;
+	GtkActionGroup *action_group;
 
 	GHashTable *entries;
 
@@ -179,6 +191,7 @@ rb_playlist_source_class_init (RBPlaylistSourceClass *klass)
 	source_class->impl_song_properties = impl_song_properties;
 	source_class->impl_can_pause = (RBSourceFeatureFunc) rb_true_function;
 	source_class->impl_show_popup = impl_show_popup;
+	source_class->impl_get_delete_action = impl_get_delete_action;
 
 	klass->impl_show_entry_view_popup = default_show_entry_view_popup;
 	klass->impl_mark_dirty = default_mark_dirty;
@@ -285,6 +298,16 @@ rb_playlist_source_constructed (GObject *object)
 	shell_player = rb_shell_get_player (shell);
 	rb_playlist_source_set_db (source, db);
 	g_object_unref (db);
+
+	source->priv->action_group = _rb_source_register_action_group (RB_SOURCE (source),
+								       "PlaylistActions",
+								       NULL, 0,
+								       shell);
+	_rb_action_group_add_source_actions (source->priv->action_group,
+					     G_OBJECT (shell),
+					     rb_playlist_source_actions,
+					     G_N_ELEMENTS (rb_playlist_source_actions));
+
 	g_object_unref (shell);
 
 	source->priv->entries = g_hash_table_new_full (rb_refstring_hash, rb_refstring_equal,
@@ -1066,3 +1089,14 @@ rb_playlist_source_make_sorting_key (RBPlaylistSource *source)
 	return sorting_key;
 }
 
+static void
+remove_from_playlist_cmd (GtkAction *action, RBSource *source)
+{
+	rb_source_delete (source);
+}
+
+static char *
+impl_get_delete_action (RBSource *source)
+{
+	return g_strdup ("RemoveFromPlaylist");
+}



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