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