From b2a61a60f3a01aec0389007f75be4cba470aa735 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sat, 4 Jun 2016 17:10:05 -0400 Subject: [PATCH] core/queue: Trigger an update when tracks are selected This will let us turn tracks bold as they are selected. Signed-off-by: Anna Schumaker --- core/queue.c | 8 +++++--- tests/core/queue.c | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/core/queue.c b/core/queue.c index 20deb193..39848f75 100644 --- a/core/queue.c +++ b/core/queue.c @@ -86,12 +86,14 @@ static inline void __queue_updated(struct queue *queue, unsigned int pos) queue->q_ops->qop_updated(queue, pos); } -static inline struct track *__queue_selected(struct queue *queue) +static inline struct track *__queue_selected(struct queue *queue, unsigned int pos) { struct track *track = (struct track *)_q_iter_val(&queue->q_cur); if (queue_has_flag(queue, Q_REPEAT) == false) __queue_remove(queue, &queue->q_cur); + else + __queue_updated(queue, pos); return track; } @@ -205,7 +207,7 @@ struct track *queue_selected(struct queue *queue, unsigned int index) return NULL; if (queue->q_cur.it_pos != index) _q_iter_set(&queue->q_tracks, &queue->q_cur, index); - return __queue_selected(queue); + return __queue_selected(queue, index); } struct track *queue_next(struct queue *queue) @@ -229,7 +231,7 @@ struct track *queue_next(struct queue *queue) _q_iter_set(&queue->q_tracks, &queue->q_cur, 0); } - return __queue_selected(queue); + return __queue_selected(queue, queue->q_cur.it_pos); } void queue_resort(struct queue *queue) diff --git a/tests/core/queue.c b/tests/core/queue.c index 5bc79030..afb87741 100644 --- a/tests/core/queue.c +++ b/tests/core/queue.c @@ -260,7 +260,9 @@ static void test_stress(unsigned int N) for (i = 0; i < ex_size; i++) { test_loop_equal((void *)queue_next(&q), (void *)track_get((i % 11) + 2), i); + test_loop_equal(count_updated, (N / 13) + (2 * i) + 1, i); queue_selected(&q, i); + test_loop_equal(count_updated, (N / 13) + (2 * i) + 2, i); test_loop_equal(queue_size(&q), ex_size, i); } test_loop_passed();