commit 5e37b60d66894b76b7fe440d4d05a6e5250d0a35
Author: phantomjinx <[email protected]>
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2