diff --git a/gui/model.c b/gui/model.c index ce3c30b4..62a4504f 100644 --- a/gui/model.c +++ b/gui/model.c @@ -4,6 +4,7 @@ #include #include #include +#include #include static const GTypeInfo queue_type_info; @@ -233,6 +234,13 @@ static void _queue_tree_model_init(GtkTreeModelIface *iface) } +static void __gui_queue_model_set_runtime(void) +{ + gchar *len = string_sec2str_long(queue_model->gqm_queue->q_length); + gtk_label_set_text(GTK_LABEL(gui_builder_widget("o_runtime")), len); + g_free(len); +} + void gui_queue_model_init(void) { queue_model = g_object_new(GUI_QUEUE_MODEL_TYPE, NULL); @@ -275,6 +283,7 @@ void gui_queue_model_add(GuiQueueModel *model, unsigned int row) _queue_model_get_iter(GTK_TREE_MODEL(model), &iter, path); gtk_tree_model_row_inserted(GTK_TREE_MODEL(model), path, &iter); + __gui_queue_model_set_runtime(); gtk_tree_path_free(path); } @@ -282,6 +291,7 @@ void gui_queue_model_remove(GuiQueueModel *model, unsigned int row) { GtkTreePath *path = gtk_tree_path_new_from_indices(row, -1); gtk_tree_model_row_deleted(GTK_TREE_MODEL(model), path); + __gui_queue_model_set_runtime(); gtk_tree_path_free(path); } @@ -295,6 +305,7 @@ void gui_queue_model_clear(GuiQueueModel *model, unsigned int n) gtk_tree_path_prev(path); } + __gui_queue_model_set_runtime(); gtk_tree_path_free(path); } @@ -305,6 +316,7 @@ void gui_queue_model_update(GuiQueueModel *model, unsigned int row) _queue_model_get_iter(GTK_TREE_MODEL(model), &iter, path); gtk_tree_model_row_changed(GTK_TREE_MODEL(model), path, &iter); + __gui_queue_model_set_runtime(); gtk_tree_path_free(path); } @@ -316,6 +328,7 @@ void gui_queue_model_set_queue(GuiQueueModel *model, struct queue *queue) gui_queue_model_clear(model, queue_size(cur)); model->gqm_queue = queue; + __gui_queue_model_set_runtime(); if (queue && queue_size(queue) > 0) gui_queue_model_add(model, 0); diff --git a/gui/queue.c b/gui/queue.c index 21c03f63..045e628b 100644 --- a/gui/queue.c +++ b/gui/queue.c @@ -19,18 +19,6 @@ enum gq_filter_how { }; -static void __queue_set_runtime(struct gui_queue *queue) -{ - gchar *len; - - if (queue != gq_queue) - return; - - len = string_sec2str_long(queue->gq_queue->q_length); - gtk_label_set_text(GTK_LABEL(gui_builder_widget("o_runtime")), len); - g_free(len); -} - static void __queue_toggle_flag(bool active, GtkWidget *widget, enum queue_flags flag) { @@ -204,7 +192,6 @@ void gui_queue_show(struct gui_queue *queue) is_enabled = queue_has_flag(queue->gq_queue, Q_ENABLED); gui_queue_model_set_queue(queue->gq_model, queue->gq_queue); gui_view_set_model(GTK_TREE_MODEL_FILTER(queue->gq_filter)); - __queue_set_runtime(queue); } else gtk_label_set_text(runtime, ""); @@ -233,23 +220,19 @@ void gui_queue_show(struct gui_queue *queue) void gui_queue_added(struct queue *queue, unsigned int row) { gui_queue_model_add(gui_queue(queue)->gq_model, row); - __queue_set_runtime(gui_queue(queue)); } void gui_queue_removed(struct queue *queue, unsigned int row) { gui_queue_model_remove(gui_queue(queue)->gq_model, row); - __queue_set_runtime(gui_queue(queue)); } void gui_queue_cleared(struct queue *queue, unsigned int n) { gui_queue_model_clear(gui_queue(queue)->gq_model, n); - __queue_set_runtime(gui_queue(queue)); } void gui_queue_updated(struct queue *queue, unsigned int row) { gui_queue_model_update(gui_queue(queue)->gq_model, row); - __queue_set_runtime(gui_queue(queue)); } diff --git a/tests/gui/model.c b/tests/gui/model.c index 418df6b7..c9b022ba 100644 --- a/tests/gui/model.c +++ b/tests/gui/model.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -171,16 +172,21 @@ static void test_model() GtkTreeModel *model; GtkTreePath *path; GtkTreeIter iter; + GtkLabel *label; GValue value; int argc = 0; + gtk_init(&argc, NULL); core_init(&argc, NULL, &init_data); + gui_builder_init("share/ocarina/ocarina6.glade"); gui_queue_model_init(); while (idle_run_task() == true) {} 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")); + test_equal(gtk_label_get_text(label), ""); memset(&value, 0, sizeof(GValue)); g_signal_connect(model, "row-inserted", (GCallback)on_row_inserted, NULL); @@ -199,6 +205,7 @@ static void test_model() playlist_add(PL_SYSTEM, "Favorites", track_get(1)); playlist_add(PL_SYSTEM, "Favorites", track_get(2)); test_equal(playlist_size(PL_SYSTEM, "Favorites"), 3); + test_equal(gtk_label_get_text(label), "42 minutes, 45 seconds"); /* ... and test again */ test_equal(gtk_tree_model_get_iter_first(model, &iter), true); @@ -268,8 +275,11 @@ static void test_model() 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")); + test_equal(gtk_label_get_text(label), "42 minutes, 45 seconds"); test_equal(count_delete, 16); test_equal(count_insert, 15); diff --git a/tests/gui/queue.c b/tests/gui/queue.c index 1c639adf..1ab406a7 100644 --- a/tests/gui/queue.c +++ b/tests/gui/queue.c @@ -154,22 +154,17 @@ static void test_tracks() { struct db_entry *dbe, *next; struct gui_queue *gq; - GtkLabel *runtime; GtkEntry *search; int argc = 0; - runtime = GTK_LABEL(gui_builder_widget("o_runtime")); - search = GTK_ENTRY(gui_builder_widget("o_search")); + search = GTK_ENTRY(gui_builder_widget("o_search")); core_init(&argc, NULL, &init_data); gq = gui_queue(playlist_get_queue(PL_SYSTEM, "Collection")); gui_queue_show(gq); - test_equal(gtk_label_get_text(runtime), ""); - playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony"); while (idle_run_task() == true) {} - test_equal(gtk_label_get_text(runtime), "42 minutes, 45 seconds"); test_not_equal((void *)gq, NULL); test_not_equal((void *)gq->gq_filter, NULL); @@ -191,10 +186,7 @@ static void test_tracks() } test_equal(gtk_tree_model_iter_n_children(gq->gq_filter, NULL), 12); - test_equal(gtk_label_get_text(runtime), "40 minutes, 35 seconds"); - gui_queue_show(NULL); - test_equal(gtk_label_get_text(runtime), ""); core_deinit(); gui_builder_deinit();