diff --git a/core/tempq.c b/core/tempq.c index 73e3d5f5..c1a4e031 100644 --- a/core/tempq.c +++ b/core/tempq.c @@ -109,6 +109,11 @@ struct queue *tempq_get(unsigned int index) return (struct queue *)g_slist_nth_data(tempq_list, index); } +unsigned int tempq_index(struct queue *queue) +{ + return g_slist_index(tempq_list, queue); +} + void tempq_move(struct queue *queue, unsigned int index) { GSList *cur = g_slist_find(tempq_list, queue); diff --git a/gui/sidebar.c b/gui/sidebar.c index f3185b65..520342a8 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -84,7 +84,7 @@ bool __sidebar_keypress(GtkTreeView *treeview, GdkEventKey *event, gpointer data queue = __sidebar_get_queue(&iter); page = gtk_tree_path_get_indices(path)[0]; - if (!queue || page >= tempq_count()) + if (tempq_index(queue) == -1) goto out; tempq_free(queue); @@ -167,7 +167,7 @@ void gui_sidebar_add(struct queue *queue) GtkTreeIter iter, sibling; gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(sb_store), - &sibling, NULL, tempq_count() - 1); + &sibling, NULL, tempq_index(queue)); gtk_list_store_insert_before(sb_store, &iter, &sibling); gtk_list_store_set(sb_store, &iter, SB_IMAGE, "audio-x-generic", diff --git a/include/core/tempq.h b/include/core/tempq.h index 56b0039c..2069567d 100644 --- a/include/core/tempq.h +++ b/include/core/tempq.h @@ -33,6 +33,9 @@ void tempq_free(struct queue *); /* Called to find a temporary queue by index. */ struct queue *tempq_get(unsigned int); +/* Called to find the index of a temporary queue. */ +unsigned int tempq_index(struct queue *); + /* Called to move a temporary queue to a new index in the list. */ void tempq_move(struct queue *, unsigned int); diff --git a/tests/core/tempq.c b/tests/core/tempq.c index 97b96e6d..2a3144df 100644 --- a/tests/core/tempq.c +++ b/tests/core/tempq.c @@ -25,6 +25,7 @@ static void test_init() tempq_move(NULL, 1); test_equal((void *)tempq_get(0), NULL); test_equal(tempq_count(), 0); + test_equal(tempq_index(NULL), (unsigned int)-1); } static void test_alloc() @@ -39,6 +40,7 @@ static void test_alloc() test_equal(queue_has_flag(q0, Q_SAVE_FLAGS), (bool)true); test_equal((void *)tempq_get(0), (void *)q0); test_equal(tempq_count(), 1); + test_equal(tempq_index(q0), 0); q1 = tempq_alloc(NULL, Q_RANDOM); test_not_equal((void *)q1, NULL); @@ -48,6 +50,7 @@ static void test_alloc() test_equal(queue_has_flag(q1, Q_SAVE_FLAGS), (bool)true); test_equal((void *)tempq_get(1), (void *)q1); test_equal(tempq_count(), 2); + test_equal(tempq_index(q1), 1); tempq_deinit(); test_equal(tempq_count(), 0);