summaryrefslogtreecommitdiff
path: root/src/totem-playlist.c
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2014-01-23 13:13:52 +0100
committerBastien Nocera <hadess@hadess.net>2014-01-23 13:13:52 +0100
commitbf4f3a1eabdf7005f00e081dc416db6a1b3d20ce (patch)
tree03a74bea8ca58697a0f3ec75b918daa2557b374f /src/totem-playlist.c
parentc323d382b3cb10bab4da22834b3a905f0a21eb0b (diff)
downloadtotem-bf4f3a1eabdf7005f00e081dc416db6a1b3d20ce.tar.gz
main: Remove shuffle setting
We now have a shuffle button in the grilo plugin, to allow shuffling the selection.
Diffstat (limited to 'src/totem-playlist.c')
-rw-r--r--src/totem-playlist.c278
1 files changed, 35 insertions, 243 deletions
diff --git a/src/totem-playlist.c b/src/totem-playlist.c
index db63b9b79..da6912ac5 100644
--- a/src/totem-playlist.c
+++ b/src/totem-playlist.c
@@ -38,7 +38,6 @@
#define PL_LEN (gtk_tree_model_iter_n_children (playlist->priv->model, NULL))
-static void ensure_shuffled (TotemPlaylist *playlist);
static gboolean totem_playlist_add_one_mrl (TotemPlaylist *playlist,
const char *mrl,
const char *display_name,
@@ -88,10 +87,6 @@ struct TotemPlaylistPrivate
guint save_format;
GtkWidget *file_chooser;
- /* Shuffle mode */
- int *shuffled;
- int current_shuffled, shuffle_len;
-
GSettings *settings;
GSettings *lockdown_settings;
@@ -119,9 +114,6 @@ struct TotemPlaylistPrivate
/* Drop disabled flag */
guint drop_disabled : 1;
-
- /* Shuffle mode */
- guint shuffle : 1;
};
/* Signals */
@@ -151,7 +143,6 @@ enum {
enum {
PROP_0,
- PROP_SHUFFLE,
PROP_REPEAT
};
@@ -737,16 +728,8 @@ update_current_from_playlist (TotemPlaylist *playlist)
if (PL_LEN != 0)
{
- if (playlist->priv->shuffle == FALSE)
- {
- indice = 0;
- } else {
- indice = playlist->priv->shuffled[0];
- playlist->priv->current_shuffled = 0;
- }
-
- playlist->priv->current = gtk_tree_path_new_from_indices
- (indice, -1);
+ indice = 0;
+ playlist->priv->current = gtk_tree_path_new_from_indices (indice, -1);
} else {
return FALSE;
}
@@ -928,21 +911,6 @@ treeview_row_changed (GtkTreeView *treeview, GtkTreePath *arg1,
playlist->priv->current = gtk_tree_path_copy (arg1);
- if (playlist->priv->shuffle != FALSE) {
- int *indices, indice, i;
-
- indices = gtk_tree_path_get_indices (playlist->priv->current);
- indice = indices[0];
-
- for (i = 0; i < PL_LEN; i++)
- {
- if (playlist->priv->shuffled[i] == indice)
- {
- playlist->priv->current_shuffled = i;
- break;
- }
- }
- }
g_signal_emit (G_OBJECT (playlist),
totem_playlist_table_signals[CHANGED], 0,
NULL);
@@ -1054,96 +1022,6 @@ update_repeat_cb (GSettings *settings, const gchar *key, TotemPlaylist *playlist
g_object_notify (G_OBJECT (playlist), "repeat");
}
-typedef struct {
- int random;
- int index;
-} RandomData;
-
-static int
-compare_random (gconstpointer ptr_a, gconstpointer ptr_b)
-{
- RandomData *a = (RandomData *) ptr_a;
- RandomData *b = (RandomData *) ptr_b;
-
- if (a->random < b->random)
- return -1;
- else if (a->random > b->random)
- return 1;
- else
- return 0;
-}
-
-static void
-ensure_shuffled (TotemPlaylist *playlist)
-{
- RandomData data;
- GArray *array;
- int i, current, current_new;
- int *indices;
-
- if (playlist->priv->shuffled == NULL)
- playlist->priv->shuffled = g_new (int, PL_LEN);
- else if (PL_LEN != playlist->priv->shuffle_len)
- playlist->priv->shuffled = g_renew (int, playlist->priv->shuffled, PL_LEN);
- playlist->priv->shuffle_len = PL_LEN;
-
- if (PL_LEN == 0)
- return;
-
- if (playlist->priv->current != NULL) {
- indices = gtk_tree_path_get_indices (playlist->priv->current);
- current = indices[0];
- } else {
- current = -1;
- }
-
- current_new = -1;
-
- array = g_array_sized_new (FALSE, FALSE, sizeof (RandomData), PL_LEN);
-
- for (i = 0; i < PL_LEN; i++) {
- data.random = g_random_int_range (0, PL_LEN);
- data.index = i;
-
- g_array_append_val (array, data);
- }
-
- g_array_sort (array, compare_random);
-
- for (i = 0; i < PL_LEN; i++) {
- playlist->priv->shuffled[i] = g_array_index (array, RandomData, i).index;
-
- if (playlist->priv->current != NULL && playlist->priv->shuffled[i] == current)
- current_new = i;
- }
-
- if (current_new > -1) {
- playlist->priv->shuffled[current_new] = playlist->priv->shuffled[0];
- playlist->priv->shuffled[0] = current;
- playlist->priv->current_shuffled = 0;
- }
-
- g_array_free (array, TRUE);
-}
-
-static void
-update_shuffle_cb (GSettings *settings, const gchar *key, TotemPlaylist *playlist)
-{
- playlist->priv->shuffle = g_settings_get_boolean (settings, "shuffle");
-
- if (playlist->priv->shuffle == FALSE) {
- g_clear_pointer (&playlist->priv->shuffled, g_free);
- playlist->priv->shuffle_len = 0;
- } else {
- ensure_shuffled (playlist);
- }
-
- g_signal_emit (G_OBJECT (playlist),
- totem_playlist_table_signals[CHANGED], 0,
- NULL);
- g_object_notify (G_OBJECT (playlist), "shuffle");
-}
-
static void
update_lockdown_cb (GSettings *settings, const gchar *key, TotemPlaylist *playlist)
{
@@ -1162,10 +1040,8 @@ init_config (TotemPlaylist *playlist)
G_CALLBACK (update_lockdown_cb), playlist);
playlist->priv->repeat = g_settings_get_boolean (playlist->priv->settings, "repeat");
- playlist->priv->shuffle = g_settings_get_boolean (playlist->priv->settings, "shuffle");
g_signal_connect (playlist->priv->settings, "changed::repeat", (GCallback) update_repeat_cb, playlist);
- g_signal_connect (playlist->priv->settings, "changed::shuffle", (GCallback) update_shuffle_cb, playlist);
}
static gboolean
@@ -1431,10 +1307,8 @@ totem_playlist_add_one_mrl (TotemPlaylist *playlist,
g_free (filename_for_display);
g_free (uri);
- if (playlist->priv->current == NULL && playlist->priv->shuffle == FALSE)
+ if (playlist->priv->current == NULL)
playlist->priv->current = gtk_tree_model_get_path (playlist->priv->model, &iter);
- if (playlist->priv->shuffle)
- ensure_shuffled (playlist);
/* And update current to point to the right file again */
if (ref != NULL) {
@@ -2030,10 +1904,6 @@ totem_playlist_clear_with_compare (TotemPlaylist *playlist,
playlist->priv->current = NULL;
}
- playlist->priv->current_shuffled = -1;
- if (playlist->priv->shuffle)
- ensure_shuffled (playlist);
-
g_signal_emit (G_OBJECT (playlist),
totem_playlist_table_signals[CURRENT_REMOVED],
0, NULL);
@@ -2043,9 +1913,6 @@ totem_playlist_clear_with_compare (TotemPlaylist *playlist,
playlist->priv->current = gtk_tree_row_reference_get_path (ref);
}
- if (playlist->priv->shuffle)
- ensure_shuffled (playlist);
-
g_signal_emit (G_OBJECT (playlist),
totem_playlist_table_signals[CHANGED], 0,
NULL);
@@ -2230,18 +2097,11 @@ totem_playlist_has_previous_mrl (TotemPlaylist *playlist)
if (update_current_from_playlist (playlist) == FALSE)
return FALSE;
- if (playlist->priv->shuffle == FALSE) {
- gtk_tree_model_get_iter (playlist->priv->model,
- &iter,
- playlist->priv->current);
-
- return gtk_tree_model_iter_previous (playlist->priv->model, &iter);
- } else {
- if (playlist->priv->current_shuffled == 0)
- return FALSE;
- }
+ gtk_tree_model_get_iter (playlist->priv->model,
+ &iter,
+ playlist->priv->current);
- return TRUE;
+ return gtk_tree_model_iter_previous (playlist->priv->model, &iter);
}
gboolean
@@ -2254,18 +2114,11 @@ totem_playlist_has_next_mrl (TotemPlaylist *playlist)
if (update_current_from_playlist (playlist) == FALSE)
return FALSE;
- if (playlist->priv->shuffle == FALSE) {
- gtk_tree_model_get_iter (playlist->priv->model,
- &iter,
- playlist->priv->current);
-
- return gtk_tree_model_iter_next (playlist->priv->model, &iter);
- } else {
- if (playlist->priv->current_shuffled == PL_LEN - 1)
- return FALSE;
- }
+ gtk_tree_model_get_iter (playlist->priv->model,
+ &iter,
+ playlist->priv->current);
- return TRUE;
+ return gtk_tree_model_iter_next (playlist->priv->model, &iter);
}
gboolean
@@ -2355,6 +2208,7 @@ void
totem_playlist_set_previous (TotemPlaylist *playlist)
{
GtkTreeIter iter;
+ char *path;
g_return_if_fail (TOTEM_IS_PLAYLIST (playlist));
@@ -2363,40 +2217,23 @@ totem_playlist_set_previous (TotemPlaylist *playlist)
totem_playlist_unset_playing (playlist);
- if (playlist->priv->shuffle == FALSE) {
- char *path;
-
- path = gtk_tree_path_to_string (playlist->priv->current);
- if (g_str_equal (path, "0")) {
- totem_playlist_set_at_end (playlist);
- g_free (path);
- return;
- }
+ path = gtk_tree_path_to_string (playlist->priv->current);
+ if (g_str_equal (path, "0")) {
+ totem_playlist_set_at_end (playlist);
g_free (path);
+ return;
+ }
+ g_free (path);
- gtk_tree_model_get_iter (playlist->priv->model,
- &iter,
- playlist->priv->current);
-
- if (!gtk_tree_model_iter_previous (playlist->priv->model, &iter))
- g_assert_not_reached ();
- gtk_tree_path_free (playlist->priv->current);
- playlist->priv->current = gtk_tree_model_get_path
- (playlist->priv->model, &iter);
- } else {
- int indice;
+ gtk_tree_model_get_iter (playlist->priv->model,
+ &iter,
+ playlist->priv->current);
- gtk_tree_path_free (playlist->priv->current);
- playlist->priv->current_shuffled--;
- if (playlist->priv->current_shuffled < 0) {
- indice = playlist->priv->shuffled[PL_LEN -1];
- playlist->priv->current_shuffled = PL_LEN -1;
- } else {
- indice = playlist->priv->shuffled[playlist->priv->current_shuffled];
- }
- playlist->priv->current = gtk_tree_path_new_from_indices
- (indice, -1);
- }
+ if (!gtk_tree_model_iter_previous (playlist->priv->model, &iter))
+ g_assert_not_reached ();
+ gtk_tree_path_free (playlist->priv->current);
+ playlist->priv->current = gtk_tree_model_get_path
+ (playlist->priv->model, &iter);
}
void
@@ -2413,26 +2250,14 @@ totem_playlist_set_next (TotemPlaylist *playlist)
totem_playlist_unset_playing (playlist);
- if (playlist->priv->shuffle == FALSE) {
- gtk_tree_model_get_iter (playlist->priv->model,
- &iter,
- playlist->priv->current);
-
- if (!gtk_tree_model_iter_next (playlist->priv->model, &iter))
- g_assert_not_reached ();
- gtk_tree_path_free (playlist->priv->current);
- playlist->priv->current = gtk_tree_model_get_path (playlist->priv->model, &iter);
- } else {
- int indice;
+ gtk_tree_model_get_iter (playlist->priv->model,
+ &iter,
+ playlist->priv->current);
- gtk_tree_path_free (playlist->priv->current);
- playlist->priv->current_shuffled++;
- if (playlist->priv->current_shuffled == PL_LEN)
- playlist->priv->current_shuffled = 0;
- indice = playlist->priv->shuffled[playlist->priv->current_shuffled];
- playlist->priv->current = gtk_tree_path_new_from_indices
- (indice, -1);
- }
+ if (!gtk_tree_model_iter_next (playlist->priv->model, &iter))
+ g_assert_not_reached ();
+ gtk_tree_path_free (playlist->priv->current);
+ playlist->priv->current = gtk_tree_model_get_path (playlist->priv->model, &iter);
}
gboolean
@@ -2451,22 +2276,6 @@ totem_playlist_set_repeat (TotemPlaylist *playlist, gboolean repeat)
g_settings_set_boolean (playlist->priv->settings, "repeat", repeat);
}
-gboolean
-totem_playlist_get_shuffle (TotemPlaylist *playlist)
-{
- g_return_val_if_fail (TOTEM_IS_PLAYLIST (playlist), FALSE);
-
- return playlist->priv->shuffle;
-}
-
-void
-totem_playlist_set_shuffle (TotemPlaylist *playlist, gboolean shuffle)
-{
- g_return_if_fail (TOTEM_IS_PLAYLIST (playlist));
-
- g_settings_set_boolean (playlist->priv->settings, "shuffle", shuffle);
-}
-
void
totem_playlist_set_at_start (TotemPlaylist *playlist)
{
@@ -2487,13 +2296,8 @@ totem_playlist_set_at_end (TotemPlaylist *playlist)
totem_playlist_unset_playing (playlist);
g_clear_pointer (&playlist->priv->current, gtk_tree_path_free);
- if (PL_LEN)
- {
- if (playlist->priv->shuffle == FALSE)
- indice = PL_LEN - 1;
- else
- indice = playlist->priv->shuffled[PL_LEN - 1];
-
+ if (PL_LEN) {
+ indice = PL_LEN - 1;
playlist->priv->current = gtk_tree_path_new_from_indices
(indice, -1);
}
@@ -2541,7 +2345,6 @@ totem_playlist_set_current (TotemPlaylist *playlist, guint current_index)
return;
totem_playlist_unset_playing (playlist);
- //FIXME problems when shuffled?
gtk_tree_path_free (playlist->priv->current);
playlist->priv->current = gtk_tree_path_new_from_indices (current_index, -1);
}
@@ -2557,9 +2360,6 @@ totem_playlist_set_property (GObject *object,
playlist = TOTEM_PLAYLIST (object);
switch (property_id) {
- case PROP_SHUFFLE:
- g_settings_set_boolean (playlist->priv->settings, "shuffle", g_value_get_boolean (value));
- break;
case PROP_REPEAT:
g_settings_set_boolean (playlist->priv->settings, "repeat", g_value_get_boolean (value));
break;
@@ -2580,9 +2380,6 @@ totem_playlist_get_property (GObject *object,
playlist = TOTEM_PLAYLIST (object);
switch (property_id) {
- case PROP_SHUFFLE:
- g_value_set_boolean (value, playlist->priv->shuffle);
- break;
case PROP_REPEAT:
g_value_set_boolean (value, playlist->priv->repeat);
break;
@@ -2665,11 +2462,6 @@ totem_playlist_class_init (TotemPlaylistClass *klass)
g_cclosure_marshal_generic,
G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
- g_object_class_install_property (object_class, PROP_SHUFFLE,
- g_param_spec_boolean ("shuffle", "Shuffle",
- "Whether shuffle mode is enabled.", FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
g_object_class_install_property (object_class, PROP_REPEAT,
g_param_spec_boolean ("repeat", "Repeat",
"Whether repeat mode is enabled.", FALSE,