diff --git a/gui/model.c b/gui/model.c index e6e89c12..c59b3b56 100644 --- a/gui/model.c +++ b/gui/model.c @@ -142,6 +142,25 @@ static gboolean _queue_model_iter_next(GtkTreeModel *model, GtkTreeIter *iter) return TRUE; } +static gboolean _queue_model_iter_children(GtkTreeModel *model, + GtkTreeIter *iter, + GtkTreeIter *parent) +{ + GuiQueueModel *gqm = GUI_QUEUE_MODEL(model); + + if (parent) + return FALSE; + + if (queue_size(gqm->gqm_queue) == 0) + return FALSE; + + _q_iter_init(&gqm->gqm_queue->q_tracks, &gqm->gqm_iter); + iter->stamp = gqm->gqm_stamp; + iter->user_data = &gqm->gqm_iter; + iter->user_data2 = _q_iter_val(&gqm->gqm_iter); + return TRUE; +} + static void _queue_model_init(GuiQueueModel *model) { model->gqm_stamp = g_random_int(); @@ -171,6 +190,7 @@ static void _queue_tree_model_init(GtkTreeModelIface *iface) iface->get_path = _queue_model_get_path; iface->get_value = _queue_model_get_value; iface->iter_next = _queue_model_iter_next; + iface->iter_children = _queue_model_iter_children; } diff --git a/tests/gui/model.c b/tests/gui/model.c index 1f056b3e..eaadc439 100644 --- a/tests/gui/model.c +++ b/tests/gui/model.c @@ -88,6 +88,7 @@ static void test_empty() test_equal(G_IS_VALUE(&value), false); test_equal(gtk_tree_model_iter_next(model, &iter), false); + test_equal(gtk_tree_model_iter_children(model, &iter, NULL), false); g_object_unref(model); } @@ -156,6 +157,10 @@ static void test_model() track = iter.user_data2; test_equal(track->tr_track, 2); + test_equal(gtk_tree_model_iter_children(model, &iter, NULL), true); + track = iter.user_data2; + test_equal(track->tr_track, 1); + g_object_unref(model); }