From a808cac04c90b7b871d0acf3c3f6fb7128ee0729 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Wed, 21 Sep 2016 16:15:53 -0400 Subject: [PATCH] gui/model: Store a GList in the GtkTreeIter Storing the current link from the playlist should give us immediate access to the track, rather than needing to use playlist_at() all the time. Additionally, we can now use g_list_next() whenever we need to do a gtk_tree_model_iter_next() Signed-off-by: Anna Schumaker --- gui/model.c | 29 ++++++++++++++--------------- include/gui/model.h | 4 ++-- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/gui/model.c b/gui/model.c index 20cad3ab..28ae6d51 100644 --- a/gui/model.c +++ b/gui/model.c @@ -61,23 +61,25 @@ static gboolean __gui_model_get_iter(GtkTreeModel *model, GtkTreeIter *iter, static GtkTreePath *__gui_model_get_path(GtkTreeModel *model, GtkTreeIter *iter) { GtkTreePath *path; + unsigned int pos; - g_return_val_if_fail(iter != NULL, FALSE); - g_return_val_if_fail(iter->user_data2, FALSE); + g_return_val_if_fail(iter != NULL, FALSE); + g_return_val_if_fail(iter->user_data, FALSE); path = gtk_tree_path_new(); - gtk_tree_path_append_index(path, GPOINTER_TO_UINT(iter->user_data)); + pos = playlist_iter_index(cur_playlist, iter->user_data); + gtk_tree_path_append_index(path, pos); return path; } static void __gui_model_get_value(GtkTreeModel *model, GtkTreeIter *iter, gint column, GValue *value) { - struct track *track = iter->user_data2; + struct track *track = playlist_iter_track(iter->user_data); gchar *str; g_return_if_fail(iter != NULL); - g_return_if_fail(iter->user_data2 != NULL); + g_return_if_fail(iter->user_data != NULL); g_return_if_fail(column < GUI_MODEL_N_COLUMNS); g_value_init(value, gui_model_columns[column]); @@ -124,13 +126,11 @@ static void __gui_model_get_value(GtkTreeModel *model, GtkTreeIter *iter, static gboolean __gui_model_iter_next(GtkTreeModel *model, GtkTreeIter *iter) { - unsigned int pos; + g_return_val_if_fail(iter != NULL, FALSE); + g_return_val_if_fail(iter->user_data, FALSE); - g_return_val_if_fail(iter != NULL, FALSE); - g_return_val_if_fail(iter->user_data2, FALSE); - - pos = GPOINTER_TO_UINT(iter->user_data) + 1; - return __gui_model_iter_nth_child(model, iter, NULL, pos); + iter->user_data = playlist_iter_next(iter->user_data); + return iter->user_data != NULL; } static gboolean __gui_model_iter_children(GtkTreeModel *model, GtkTreeIter *iter, @@ -159,10 +159,9 @@ static gboolean __gui_model_iter_nth_child(GtkTreeModel *model, if (parent || !cur_playlist || n >= playlist_size(cur_playlist)) return FALSE; - iter->stamp = gui_model->gm_stamp; - iter->user_data = GUINT_TO_POINTER(n); - iter->user_data2 = playlist_at(cur_playlist, n); - return TRUE; + iter->stamp = gui_model->gm_stamp; + iter->user_data = playlist_iter_get(cur_playlist, n); + return iter->user_data != NULL; } static gboolean __gui_model_iter_parent(GtkTreeModel *model, GtkTreeIter *iter, diff --git a/include/gui/model.h b/include/gui/model.h index ff9deffa..326ae8ac 100644 --- a/include/gui/model.h +++ b/include/gui/model.h @@ -74,8 +74,8 @@ struct playlist *gui_model_get_playlist(void); static inline struct track *gui_model_iter_get_track(GtkTreeIter *iter) { g_return_val_if_fail(iter != NULL, NULL); - g_return_val_if_fail(iter->user_data2 != NULL, NULL); - return (struct track *)iter->user_data2; + g_return_val_if_fail(iter->user_data != NULL, NULL); + return playlist_iter_track(iter->user_data); } /* Called to convert a GtkTreePath into a struct track */