diff --git a/gui/model.c b/gui/model.c index 62a4504f..e2e2af5c 100644 --- a/gui/model.c +++ b/gui/model.c @@ -276,32 +276,45 @@ GType gui_queue_model_get_type() return queue_type; } -void gui_queue_model_add(GuiQueueModel *model, unsigned int row) +void gui_queue_model_add(struct queue *queue, unsigned int row) { - GtkTreePath *path = gtk_tree_path_new_from_indices(row, -1); - GtkTreeIter iter; + GtkTreePath *path; + GtkTreeIter iter; - _queue_model_get_iter(GTK_TREE_MODEL(model), &iter, path); - gtk_tree_model_row_inserted(GTK_TREE_MODEL(model), path, &iter); + if (queue != queue_model->gqm_queue) + return; + + path = gtk_tree_path_new_from_indices(row, -1); + _queue_model_get_iter(GTK_TREE_MODEL(queue_model), &iter, path); + gtk_tree_model_row_inserted(GTK_TREE_MODEL(queue_model), path, &iter); __gui_queue_model_set_runtime(); gtk_tree_path_free(path); } -void gui_queue_model_remove(GuiQueueModel *model, unsigned int row) +void gui_queue_model_remove(struct queue *queue, unsigned int row) { - GtkTreePath *path = gtk_tree_path_new_from_indices(row, -1); - gtk_tree_model_row_deleted(GTK_TREE_MODEL(model), path); + GtkTreePath *path; + + if (queue != queue_model->gqm_queue) + return; + + path = gtk_tree_path_new_from_indices(row, -1); + gtk_tree_model_row_deleted(GTK_TREE_MODEL(queue_model), path); __gui_queue_model_set_runtime(); gtk_tree_path_free(path); } -void gui_queue_model_clear(GuiQueueModel *model, unsigned int n) +void gui_queue_model_clear(struct queue *queue, unsigned int n) { - GtkTreePath *path = gtk_tree_path_new_from_indices(n - 1, -1); + GtkTreePath *path; unsigned int i; + if (queue != queue_model->gqm_queue) + return; + + path = gtk_tree_path_new_from_indices(n - 1, -1); for (i = 0; i < n; i++) { - gtk_tree_model_row_deleted(GTK_TREE_MODEL(model), path); + gtk_tree_model_row_deleted(GTK_TREE_MODEL(queue_model), path); gtk_tree_path_prev(path); } @@ -309,29 +322,33 @@ void gui_queue_model_clear(GuiQueueModel *model, unsigned int n) gtk_tree_path_free(path); } -void gui_queue_model_update(GuiQueueModel *model, unsigned int row) +void gui_queue_model_update(struct queue *queue, unsigned int row) { - GtkTreePath *path = gtk_tree_path_new_from_indices(row, -1); + GtkTreePath *path; GtkTreeIter iter; - _queue_model_get_iter(GTK_TREE_MODEL(model), &iter, path); - gtk_tree_model_row_changed(GTK_TREE_MODEL(model), path, &iter); + if (queue != queue_model->gqm_queue) + return; + + path = gtk_tree_path_new_from_indices(row, -1); + _queue_model_get_iter(GTK_TREE_MODEL(queue_model), &iter, path); + gtk_tree_model_row_changed(GTK_TREE_MODEL(queue_model), path, &iter); __gui_queue_model_set_runtime(); gtk_tree_path_free(path); } -void gui_queue_model_set_queue(GuiQueueModel *model, struct queue *queue) +void gui_queue_model_set_queue(struct queue *queue) { - struct queue *cur = model->gqm_queue; + struct queue *cur = queue_model->gqm_queue; if (cur) - gui_queue_model_clear(model, queue_size(cur)); + gui_queue_model_clear(cur, queue_size(cur)); - model->gqm_queue = queue; + queue_model->gqm_queue = queue; __gui_queue_model_set_runtime(); if (queue && queue_size(queue) > 0) - gui_queue_model_add(model, 0); + gui_queue_model_add(queue, 0); } struct queue *gui_queue_model_get_queue(void) @@ -339,13 +356,12 @@ struct queue *gui_queue_model_get_queue(void) return queue_model->gqm_queue; } -struct track * gui_queue_model_path_get_track(GuiQueueModel *model, - GtkTreePath *path) +struct track * gui_queue_model_path_get_track(GtkTreePath *path) { GtkTreeIter iter; - _queue_model_get_iter(GTK_TREE_MODEL(model), &iter, path); - return gui_queue_model_iter_get_track(model, &iter); + _queue_model_get_iter(GTK_TREE_MODEL(queue_model), &iter, path); + return gui_queue_model_iter_get_track(&iter); } diff --git a/gui/playlist.c b/gui/playlist.c index 88b1719d..b9870827 100644 --- a/gui/playlist.c +++ b/gui/playlist.c @@ -188,13 +188,13 @@ static void *__playlist_init(struct queue *queue, void *data) static void __playlist_added(struct queue *queue, unsigned int row) { - gui_queue_added(queue, row); + gui_queue_model_add(queue, row); __playlist_update_sizes(queue); } static void __playlist_removed(struct queue *queue, unsigned int row) { - gui_queue_removed(queue, row); + gui_queue_model_remove(queue, row); __playlist_update_sizes(queue); } @@ -333,6 +333,6 @@ struct queue_ops playlist_ops = { .qop_added = __playlist_added, .qop_erase = __playlist_erase, .qop_removed = __playlist_removed, - .qop_cleared = gui_queue_cleared, - .qop_updated = gui_queue_updated, + .qop_cleared = gui_queue_model_clear, + .qop_updated = gui_queue_model_update, }; diff --git a/gui/queue.c b/gui/queue.c index 045e628b..08af985e 100644 --- a/gui/queue.c +++ b/gui/queue.c @@ -74,7 +74,7 @@ static gboolean __queue_visible_func(GtkTreeModel *model, GtkTreeIter *iter, if (!gq_queue || !gq_queue->gq_search) return TRUE; - track = gui_queue_model_iter_get_track(gq_queue->gq_model, iter); + track = gui_queue_model_iter_get_track(iter); for (i = 0; gq_queue->gq_search[i]; i++) { token = gq_queue->gq_search[i]; @@ -140,7 +140,7 @@ struct gui_queue *gui_queue_alloc(struct playlist *playlist, struct queue *queue gq->gq_text = g_strdup(text); gq->gq_search = NULL; gq->gq_model = g_object_ref(gui_queue_model_get()); - gui_queue_model_set_queue(gq->gq_model, queue); + gui_queue_model_set_queue(queue); gq->gq_filter = gtk_tree_model_filter_new( GTK_TREE_MODEL(gq->gq_model), NULL); gq->gq_playlist = playlist; @@ -190,7 +190,7 @@ void gui_queue_show(struct gui_queue *queue) has_random = queue_has_flag(queue->gq_queue, Q_RANDOM); has_repeat = queue_has_flag(queue->gq_queue, Q_REPEAT); is_enabled = queue_has_flag(queue->gq_queue, Q_ENABLED); - gui_queue_model_set_queue(queue->gq_model, queue->gq_queue); + gui_queue_model_set_queue(queue->gq_queue); gui_view_set_model(GTK_TREE_MODEL_FILTER(queue->gq_filter)); } else gtk_label_set_text(runtime, ""); @@ -216,23 +216,3 @@ void gui_queue_show(struct gui_queue *queue) } else gtk_entry_set_text(search, ""); } - -void gui_queue_added(struct queue *queue, unsigned int row) -{ - gui_queue_model_add(gui_queue(queue)->gq_model, row); -} - -void gui_queue_removed(struct queue *queue, unsigned int row) -{ - gui_queue_model_remove(gui_queue(queue)->gq_model, row); -} - -void gui_queue_cleared(struct queue *queue, unsigned int n) -{ - gui_queue_model_clear(gui_queue(queue)->gq_model, n); -} - -void gui_queue_updated(struct queue *queue, unsigned int row) -{ - gui_queue_model_update(gui_queue(queue)->gq_model, row); -} diff --git a/gui/tempq.c b/gui/tempq.c index 24a6e865..89ddb62a 100644 --- a/gui/tempq.c +++ b/gui/tempq.c @@ -24,7 +24,7 @@ static void __tempq_deinit(struct queue *queue) static void __tempq_added(struct queue *queue, unsigned int pos) { - gui_queue_added(queue, pos); + gui_queue_model_add(queue, pos); gui_sidebar_set_size(gui_queue(queue)); tempq_save(queue, Q_ENABLED); } @@ -36,14 +36,14 @@ static bool __tempq_erase(struct queue *queue, struct track *track) static void __tempq_removed(struct queue *queue, unsigned int pos) { - gui_queue_removed(queue, pos); + gui_queue_model_remove(queue, pos); gui_sidebar_set_size(gui_queue(queue)); tempq_save(queue, Q_ENABLED); } static void __tempq_cleared(struct queue *queue, unsigned int n) { - gui_queue_cleared(queue, n); + gui_queue_model_clear(queue, n); gui_sidebar_set_size(gui_queue(queue)); } @@ -55,5 +55,5 @@ struct queue_ops tempq_ops = { .qop_removed = __tempq_removed, .qop_cleared = __tempq_cleared, .qop_save = tempq_save, - .qop_updated = gui_queue_updated, + .qop_updated = gui_queue_model_update, }; diff --git a/gui/view.c b/gui/view.c index b19d7e23..88067768 100644 --- a/gui/view.c +++ b/gui/view.c @@ -49,9 +49,8 @@ static inline GtkTreePath *__view_filter_convert_path(GtkTreePath *orig) static struct track *__view_filter_get_track(GtkTreePath *orig) { - GuiQueueModel *model = gui_queue_model_get(); - GtkTreePath *real = __view_filter_convert_path(orig); - struct track *track = gui_queue_model_path_get_track(model, real); + GtkTreePath *real = __view_filter_convert_path(orig); + struct track *track = gui_queue_model_path_get_track(real); gtk_tree_path_free(real); return track; diff --git a/include/gui/model.h b/include/gui/model.h index fe6370ce..dad48b72 100644 --- a/include/gui/model.h +++ b/include/gui/model.h @@ -55,19 +55,19 @@ GuiQueueModel *gui_queue_model_get(void); GType gui_queue_model_get_type(); /* Called to add a row to the model */ -void gui_queue_model_add(GuiQueueModel *, unsigned int); +void gui_queue_model_add(struct queue *, unsigned int); /* Called to remove a row from the model */ -void gui_queue_model_remove(GuiQueueModel *, unsigned int); +void gui_queue_model_remove(struct queue *, unsigned int); /* Called to remove all rows from the model */ -void gui_queue_model_clear(GuiQueueModel *, unsigned int); +void gui_queue_model_clear(struct queue *, unsigned int); /* Called to update a row in the model */ -void gui_queue_model_update(GuiQueueModel *, unsigned int); +void gui_queue_model_update(struct queue *, unsigned int); /* Called to change the queue represented by the model. */ -void gui_queue_model_set_queue(GuiQueueModel *, struct queue *); +void gui_queue_model_set_queue(struct queue *); /* Called to get the queue currently attached to the model. */ struct queue *gui_queue_model_get_queue(void); @@ -75,8 +75,7 @@ struct queue *gui_queue_model_get_queue(void); /* Called to convert a GtkTreeIter into a struct track */ static inline -struct track *gui_queue_model_iter_get_track(GuiQueueModel *model, - GtkTreeIter *iter) +struct track *gui_queue_model_iter_get_track(GtkTreeIter *iter) { g_return_val_if_fail(iter != NULL, NULL); g_return_val_if_fail(iter->user_data2 != NULL, NULL); @@ -84,6 +83,6 @@ struct track *gui_queue_model_iter_get_track(GuiQueueModel *model, } /* Called to convert a GtkTreePath into a struct track */ -struct track *gui_queue_model_path_get_track(GuiQueueModel *, GtkTreePath *); +struct track *gui_queue_model_path_get_track(GtkTreePath *); #endif /* OCARINA_GUI_MODEL_H */ diff --git a/include/gui/queue.h b/include/gui/queue.h index a7c3ee76..5132a5fa 100644 --- a/include/gui/queue.h +++ b/include/gui/queue.h @@ -66,16 +66,4 @@ static inline bool gui_queue_can_disable(struct gui_queue *gq) /* Called to set the correct state of the random and repeat buttons. */ void gui_queue_show(struct gui_queue *); -/* Called when a track is added to the queue. */ -void gui_queue_added(struct queue *, unsigned int); - -/* Called when a track is removed from the queue. */ -void gui_queue_removed(struct queue *, unsigned int); - -/* Called when a queue is cleared. */ -void gui_queue_cleared(struct queue *, unsigned int); - -/* Called when a track is updated. */ -void gui_queue_updated(struct queue *, unsigned int); - #endif /* OCARINA_GUI_QUEUE_H */ diff --git a/tests/gui/model.c b/tests/gui/model.c index c9b022ba..abc5a97c 100644 --- a/tests/gui/model.c +++ b/tests/gui/model.c @@ -26,18 +26,7 @@ void *test_queue_init(struct queue *queue, void *data) { return NULL; } void test_queue_deinit(struct queue *queue) { } -void test_queue_added(struct queue *queue, unsigned int row) -{ - if (queue->q_private) - gui_queue_model_add(queue->q_private, row); -} -void test_queue_removed(struct queue *queue, unsigned int row) - { gui_queue_model_remove(queue->q_private, row); } -void test_queue_cleared(struct queue *queue, unsigned int n) - { gui_queue_model_get_type(queue->q_private, n); } void test_queue_save(struct queue *queue, enum queue_flags flag) {} -void test_queue_updated(struct queue *queue, unsigned int row) - { gui_queue_model_update(queue->q_private, row); } void test_on_load(struct track *track) {} void test_on_state_change(GstState state) {} void test_on_config_pause(int count) {} @@ -45,11 +34,11 @@ void test_on_config_pause(int count) {} struct queue_ops test_ops = { .qop_init = test_queue_init, .qop_deinit = test_queue_deinit, - .qop_added = test_queue_added, - .qop_removed = test_queue_removed, - .qop_cleared = test_queue_cleared, + .qop_added = gui_queue_model_add, + .qop_removed = gui_queue_model_remove, + .qop_cleared = gui_queue_model_clear, .qop_save = test_queue_save, - .qop_updated = test_queue_updated, + .qop_updated = gui_queue_model_update, }; struct audio_ops test_audio_ops = { @@ -72,7 +61,7 @@ static void test_init() gui_queue_model_init(); model = gui_queue_model_get(); test_equal((void *)gui_queue_model_get_queue(), NULL); - gui_queue_model_set_queue(model, playlist_get_queue(PL_SYSTEM, "Collection")); + gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection")); test_not_equal((void *)model, NULL); test_equal(GTK_IS_TREE_MODEL(model), true); test_equal((void *)gui_queue_model_get_queue(), @@ -121,14 +110,12 @@ static void test_empty() gui_queue_model_init(); model = GTK_TREE_MODEL(gui_queue_model_get()); - gui_queue_model_set_queue(GUI_QUEUE_MODEL(model), - playlist_get_queue(PL_SYSTEM, "Collection")); + gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection")); memset(&value, 0, sizeof(GValue)); test_equal(gtk_tree_model_get_iter_first(model, &iter), false); test_equal((void *)gtk_tree_model_get_path(model, &iter), NULL); - test_equal((void *)gui_queue_model_iter_get_track(GUI_QUEUE_MODEL(model), - &iter), NULL); + test_equal((void *)gui_queue_model_iter_get_track(&iter), NULL); /* These will all trigger assertion failures ... sorry */ gtk_tree_model_get_value(model, &iter, Q_MODEL_TRACK_NR, &value); @@ -184,8 +171,7 @@ static void test_model() model = GTK_TREE_MODEL(gui_queue_model_get()); label = GTK_LABEL(gui_builder_widget("o_runtime")); - gui_queue_model_set_queue(GUI_QUEUE_MODEL(model), - playlist_get_queue(PL_SYSTEM, "Collection")); + gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection")); test_equal(gtk_label_get_text(label), ""); memset(&value, 0, sizeof(GValue)); @@ -209,15 +195,14 @@ static void test_model() /* ... and test again */ test_equal(gtk_tree_model_get_iter_first(model, &iter), true); - track = gui_queue_model_iter_get_track(GUI_QUEUE_MODEL(model), &iter); + track = gui_queue_model_iter_get_track(&iter); test_equal(track->tr_track, 1); audio_load(track); path = gtk_tree_model_get_path(model, &iter); test_not_equal((void *)path, NULL); test_equal(gtk_tree_path_get_indices(path)[0], 0); - test_equal((void *)gui_queue_model_path_get_track(GUI_QUEUE_MODEL(model), - path), (void *)track); + test_equal((void *)gui_queue_model_path_get_track(path), (void *)track); gtk_tree_path_free(path); gtk_tree_model_get_value(model, &iter, Q_MODEL_TRACK_NR, &value); @@ -256,35 +241,33 @@ static void test_model() g_value_unset(&value); test_equal(gtk_tree_model_iter_next(model, &iter), true); - track = gui_queue_model_iter_get_track(GUI_QUEUE_MODEL(model), &iter); + track = gui_queue_model_iter_get_track(&iter); test_equal(track->tr_track, 2); gtk_tree_model_get_value(model, &iter, Q_MODEL_FONT, &value); test_equal(g_value_get_string(&value), ""); g_value_unset(&value); test_equal(gtk_tree_model_iter_children(model, &iter, NULL), true); - track = gui_queue_model_iter_get_track(GUI_QUEUE_MODEL(model), &iter); + track = gui_queue_model_iter_get_track(&iter); test_equal(track->tr_track, 1); test_equal(gtk_tree_model_iter_has_child(model, &iter), false); test_equal(gtk_tree_model_iter_n_children(model, &iter), 0); test_equal(gtk_tree_model_iter_n_children(model, NULL), 13); - gui_queue_model_set_queue(GUI_QUEUE_MODEL(model), - playlist_get_queue(PL_SYSTEM, "Favorites")); + gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Favorites")); test_equal(count_delete, 13); test_equal(count_insert, 14); test_equal(gtk_tree_model_iter_n_children(model, NULL), 3); test_equal(gtk_label_get_text(label), "10 minutes, 46 seconds"); - gui_queue_model_set_queue(GUI_QUEUE_MODEL(model), - playlist_get_queue(PL_SYSTEM, "Collection")); + gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection")); test_equal(gtk_label_get_text(label), "42 minutes, 45 seconds"); test_equal(count_delete, 16); test_equal(count_insert, 15); test_equal(gtk_tree_model_iter_nth_child(model, &iter, NULL, 3), true); - track = gui_queue_model_iter_get_track(GUI_QUEUE_MODEL(model), &iter); + track = gui_queue_model_iter_get_track(&iter); test_equal(track->tr_track, 4); test_equal(gtk_tree_model_iter_parent(model, &iter, &iter), false); diff --git a/tests/gui/queue.c b/tests/gui/queue.c index 1ab406a7..f64f804c 100644 --- a/tests/gui/queue.c +++ b/tests/gui/queue.c @@ -26,11 +26,11 @@ static void test_queue_save(struct queue *queue, unsigned int row) {} static struct queue_ops test_ops = { .qop_init = test_queue_init, .qop_deinit = gui_queue_free, - .qop_cleared = gui_queue_cleared, - .qop_added = gui_queue_added, - .qop_removed = gui_queue_removed, + .qop_cleared = gui_queue_model_clear, + .qop_added = gui_queue_model_add, + .qop_removed = gui_queue_model_remove, .qop_save = test_queue_save, - .qop_updated = gui_queue_updated, + .qop_updated = gui_queue_model_update, }; struct core_init_data init_data = { @@ -169,6 +169,7 @@ static void test_tracks() test_not_equal((void *)gq, NULL); test_not_equal((void *)gq->gq_filter, NULL); test_equal(gtk_tree_model_iter_n_children(gq->gq_filter, NULL), 13); + gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection")); gtk_entry_set_text(search, "zelda"); g_signal_emit_by_name(search, "search-changed"); diff --git a/tests/gui/view.c b/tests/gui/view.c index c14d5303..1d142528 100644 --- a/tests/gui/view.c +++ b/tests/gui/view.c @@ -76,8 +76,7 @@ static void test_treeview() playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony"); while (idle_run_task() == true) {} model = GTK_TREE_MODEL(gui_queue_model_get()); - gui_queue_model_set_queue(GUI_QUEUE_MODEL(model), - playlist_get_queue(PL_SYSTEM, "Collection")); + gui_queue_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection")); filter = gtk_tree_model_filter_new(model, NULL); treeview = GTK_TREE_VIEW(gui_builder_widget("o_treeview"));