rhythmbox r5698 - in trunk: . shell
- From: jmatthew svn gnome org
- To: svn-commits-list gnome org
- Subject: rhythmbox r5698 - in trunk: . shell
- Date: Sat,  3 May 2008 22:57:54 +0100 (BST)
Author: jmatthew
Date: Sat May  3 21:57:53 2008
New Revision: 5698
URL: http://svn.gnome.org/viewvc/rhythmbox?rev=5698&view=rev
Log:
2008-05-04  Jonathan Matthew  <jonathan d14n org>
	* shell/rb-play-order-queue.c: (rb_queue_play_order_get_next):
	Rather than returning the entry after the current playing entry,
	return the earliest entry in the query model that isn't already
	playing.  This makes the queue behave a little better when it gets
	shuffled or otherwise played out of order.
	* shell/rb-shell-player.c: (rb_shell_player_entry_activated_cb):
	When an entry in the queue is activated, don't move it to the start of
	the queue; the above change makes this work properly without looking
	weird.
Modified:
   trunk/ChangeLog
   trunk/shell/rb-play-order-queue.c
   trunk/shell/rb-shell-player.c
Modified: trunk/shell/rb-play-order-queue.c
==============================================================================
--- trunk/shell/rb-play-order-queue.c	(original)
+++ trunk/shell/rb-play-order-queue.c	Sat May  3 21:57:53 2008
@@ -90,6 +90,8 @@
 {
 	RhythmDBQueryModel *model;
 	RhythmDBEntry *entry;
+	RhythmDBEntry *first;
+	GtkTreeIter iter;
 
 	g_return_val_if_fail (porder != NULL, NULL);
 	g_return_val_if_fail (RB_IS_QUEUE_PLAY_ORDER (porder), NULL);
@@ -98,17 +100,33 @@
 	if (model == NULL)
 		return NULL;
 
+	/* the play queue should try to play the earliest entry in the
+	 * query model that it can.  so there are three possible cases here:
+	 *
+	 * - we have no current playing entry, so return the first
+	 * - the current playing entry is the first, so return the next
+	 * - the current playing entry is not the first, so return the first
+	 */
+
 	g_object_get (porder, "playing-entry", &entry, NULL);
+
+	if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter)) {
+		first = NULL;
+	} else {
+		first = rhythmdb_query_model_iter_to_entry (model, &iter);
+	}
+
 	if (entry == NULL) {
-		GtkTreeIter iter;
-		if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter))
-			return NULL;
-		return rhythmdb_query_model_iter_to_entry (model, &iter);
+		return first;
+	} else if (entry != first) {
+		rhythmdb_entry_unref (entry);
+		return first;
 	} else {
 		RhythmDBEntry *next;
 
 		next = rhythmdb_query_model_get_next_from_entry (model, entry);
 		rhythmdb_entry_unref (entry);
+		rhythmdb_entry_unref (first);
 		return next;
 	}
 }
Modified: trunk/shell/rb-shell-player.c
==============================================================================
--- trunk/shell/rb-shell-player.c	(original)
+++ trunk/shell/rb-shell-player.c	Sat May  3 21:57:53 2008
@@ -2397,8 +2397,6 @@
 				player->priv->source = player->priv->selected_source;
 			}
 
-			/* queue entry activated: move it to the start of the queue */
-			rb_static_playlist_source_move_entry (RB_STATIC_PLAYLIST_SOURCE (player->priv->queue_source), entry, 0);
 			rb_shell_player_set_playing_source (player, RB_SOURCE (player->priv->queue_source));
 
 			was_from_queue = FALSE;
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]