From 9c3adf2b09498a74d6de6dbf7a35bdc6d6e01c67 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sat, 16 Jan 2016 13:45:09 -0500 Subject: [PATCH] gui/model: Add support for gtk_tree_model_get_path() Signed-off-by: Anna Schumaker --- gui/model.c | 18 +++++++++++++++++- tests/gui/model.c | 7 +++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/gui/model.c b/gui/model.c index e42c172e..e284e1ce 100644 --- a/gui/model.c +++ b/gui/model.c @@ -56,10 +56,25 @@ static gboolean _queue_model_get_iter(GtkTreeModel *model, GtkTreeIter *iter, _q_iter_set(&gqm->gqm_queue->q_tracks, &gqm->gqm_iter, indices[0]); iter->stamp = gqm->gqm_stamp; iter->user_data = &gqm->gqm_iter; - iter->user_data2 = queue_at(gqm->gqm_queue, indices[0]); + iter->user_data2 = _q_iter_val(&gqm->gqm_iter); return TRUE; } +static GtkTreePath *_queue_model_get_path(GtkTreeModel *model, GtkTreeIter *iter) +{ + struct _q_iter *q_it; + GtkTreePath *path; + + g_return_val_if_fail(iter != NULL, FALSE); + g_return_val_if_fail(iter->user_data, FALSE); + g_return_val_if_fail(iter->user_data2, FALSE); + q_it = iter->user_data; + + path = gtk_tree_path_new(); + gtk_tree_path_append_index(path, q_it->it_pos); + return path; +} + static void _queue_model_init(GuiQueueModel *model) { model->gqm_stamp = g_random_int(); @@ -86,6 +101,7 @@ static void _queue_tree_model_init(GtkTreeModelIface *iface) iface->get_n_columns = _queue_model_get_n_columns; iface->get_column_type = _queue_model_get_column_type; iface->get_iter = _queue_model_get_iter; + iface->get_path = _queue_model_get_path; } diff --git a/tests/gui/model.c b/tests/gui/model.c index e83a8be1..217f5808 100644 --- a/tests/gui/model.c +++ b/tests/gui/model.c @@ -13,6 +13,7 @@ static void test_model() { GtkTreeModel *treemodel; GuiQueueModel *model; + GtkTreePath *path; GtkTreeIter iter; int argc = 0; GType type; @@ -55,6 +56,7 @@ static void test_model() /* Tests before adding tracks to the collection */ test_equal(gtk_tree_model_get_iter_first(treemodel, &iter), false); + test_equal((void *)gtk_tree_model_get_path(treemodel, &iter), NULL); /* Okay, now scan a directory and test again */ collection_add("tests/Music/Hyrule Symphony"); @@ -64,6 +66,11 @@ static void test_model() test_equal(gtk_tree_model_get_iter_first(treemodel, &iter), true); test_equal(((struct track *)iter.user_data2)->tr_track, 1); + path = gtk_tree_model_get_path(treemodel, &iter); + test_not_equal((void *)path, NULL); + test_equal(gtk_tree_path_get_indices(path)[0], 0); + gtk_tree_path_free(path); + g_object_unref(model); test_equal(G_IS_OBJECT(model), false); }