commit 5e37b60d66894b76b7fe440d4d05a6e5250d0a35
Author: phantomjinx <p.g.richard...@phantomjinx.co.uk>
Date:   Thu Sep 2 22:35:54 2010 +0100

    Fixes some selection errors when removing tracks
    
    * gtkpod_app_iface.c
     * tracks being removed should be removed from selected and displayed
       tracks lists before notifying plugins that the track has been
         removed.
    
    * media_player.c
     * Clear the song label and track list when removing tracks
    
    * display_coverart.c
    * details.c
     * Replace g_return_if_fails with quieter normal returns

 libgtkpod/gtkpod_app_iface.c             |    6 ++++++
 plugins/cover_display/display_coverart.c |    5 +++--
 plugins/details_editor/details.c         |    7 +++++--
 plugins/media_player/media_player.c      |   13 +++++++++++--
 4 files changed, 25 insertions(+), 6 deletions(-)
---
diff --git a/libgtkpod/gtkpod_app_iface.c b/libgtkpod/gtkpod_app_iface.c
index 2b7e2f1..7c05285 100644
--- a/libgtkpod/gtkpod_app_iface.c
+++ b/libgtkpod/gtkpod_app_iface.c
@@ -283,6 +283,12 @@ void gtkpod_track_removed(Track *track) {
     g_return_if_fail (GTKPOD_IS_APP(gtkpod_app));
     g_return_if_fail (track);
 
+    GList *selected_tracks = GTKPOD_APP_GET_INTERFACE 
(gtkpod_app)->selected_tracks;
+    GTKPOD_APP_GET_INTERFACE (gtkpod_app)->selected_tracks = 
g_list_remove(selected_tracks, track);
+
+    GList *displayed_tracks = GTKPOD_APP_GET_INTERFACE 
(gtkpod_app)->displayed_tracks;
+    GTKPOD_APP_GET_INTERFACE (gtkpod_app)->displayed_tracks = 
g_list_remove(displayed_tracks, track);
+
     g_signal_emit(gtkpod_app, gtkpod_app_signals[TRACK_REMOVED], 0, track);
 }
 
diff --git a/plugins/cover_display/display_coverart.c 
b/plugins/cover_display/display_coverart.c
index 8d034f8..7372730 100644
--- a/plugins/cover_display/display_coverart.c
+++ b/plugins/cover_display/display_coverart.c
@@ -836,8 +836,9 @@ void coverart_track_changed(Track *track, gint signal) {
 
     switch (signal) {
     case COVERART_REMOVE_SIGNAL:
-        g_return_if_fail (keypos);
         g_free(trk_key);
+        if (! keypos)
+            return;
 
         /* Reassign trk_key to the key from the list */
         trk_key = keypos->data;
@@ -930,7 +931,7 @@ void coverart_track_changed(Track *track, gint signal) {
     case COVERART_CHANGE_SIGNAL:
         /* A track is declaring itself as changed so what to do? */
         findremove = FALSE;
-        if (keypos == NULL) {
+        if (!keypos) {
             /* The track could not be found according to the key!
              * The ONLY way this could happen is if the user changed the
              * artist or album of the track. Well it should be rare but the 
only
diff --git a/plugins/details_editor/details.c b/plugins/details_editor/details.c
index 19119f2..bf7cb83 100644
--- a/plugins/details_editor/details.c
+++ b/plugins/details_editor/details.c
@@ -1346,8 +1346,11 @@ void details_remove_track(Track *track) {
     gint i;
     Track *dis_track;
 
-    g_return_if_fail (details_view);
-    g_return_if_fail (track);
+    if (!track)
+        return;
+
+    if (!details_view)
+        return;
 
     i = g_list_index(details_view->orig_tracks, track);
     if (i == -1)
diff --git a/plugins/media_player/media_player.c 
b/plugins/media_player/media_player.c
index 1425fe3..512f2a3 100644
--- a/plugins/media_player/media_player.c
+++ b/plugins/media_player/media_player.c
@@ -161,8 +161,10 @@ static gboolean volume_changed_cb(GtkRange *range, 
GtkScrollType scroll, gdouble
 //}
 
 static void set_song_label(Track *track) {
-    if (!track)
+    if (!track) {
+        gtk_label_set_markup(GTK_LABEL(player->song_label), "");
         return;
+    }
 
     gchar *label;
 
@@ -170,7 +172,7 @@ static void set_song_label(Track *track) {
     const gchar *track_title = track->title ? track->title : _("No Track 
Title");
     gboolean have_track_artist = track->artist && strlen(track->artist) > 0;
     gboolean have_track_album = track->album && strlen(track->album) > 0;
-    
+
     if (have_track_artist && have_track_album)
         label = g_markup_printf_escaped(_("<b>%s</b> by %s from %s"), 
track_title, track->artist, track->album);
     else if (have_track_artist)
@@ -298,6 +300,9 @@ static void previous_song() {
     if (!player)
         return;
 
+    if (!player->tracks || g_list_length(player->tracks) == 0)
+        return;
+
     player->previousButtonPressed = TRUE;
     player->tracks = g_list_previous (player->tracks);
     stop_song(FALSE);
@@ -313,6 +318,9 @@ static void play_song() {
     if (!player)
         return;
 
+    if (!player->tracks || g_list_length(player->tracks) == 0)
+        return;
+
     if (!g_thread_supported ()) {
         g_thread_init(NULL);
         gdk_threads_init();
@@ -394,6 +402,7 @@ void set_selected_tracks(GList *tracks) {
     if (player->tracks) {
         g_list_free(player->tracks);
         player->tracks = NULL;
+        set_song_label(NULL);
     }
 
     if (! tracks)

------------------------------------------------------------------------------
This SF.net Dev2Dev email is sponsored by:

Show off your parallel programming skills.
Enter the Intel(R) Threading Challenge 2010.
http://p.sf.net/sfu/intel-thread-sfd
_______________________________________________
gtkpod-cvs2 mailing list
gtkpod-cvs2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to