diff --git a/gui/queue.c b/gui/queue.c index 9c223e9f..514ac0b3 100644 --- a/gui/queue.c +++ b/gui/queue.c @@ -7,11 +7,9 @@ static struct gui_queue *gq_queue = NULL; -static void __queue_toggle_button(GtkToggleButton *button, - enum queue_flags flag) +static void __queue_toggle_flag(bool active, GtkWidget *widget, + enum queue_flags flag) { - GtkWidget *image = gtk_button_get_image(GTK_BUTTON(button)); - if (gq_queue == NULL) return; @@ -19,34 +17,33 @@ static void __queue_toggle_button(GtkToggleButton *button, * Some GTK themes have trouble with toggle buttons, * so let's help users by changing image sensitivity. */ - if (gtk_toggle_button_get_active(button)) { + if (active) queue_set_flag(gq_queue->gq_queue, flag); - gtk_widget_set_sensitive(image, true); - } else { + else queue_unset_flag(gq_queue->gq_queue, flag); - gtk_widget_set_sensitive(image, false); - } + + gtk_widget_set_sensitive(widget, active); } void __queue_random(GtkToggleButton *button, gpointer data) { - __queue_toggle_button(button, Q_RANDOM); + __queue_toggle_flag(gtk_toggle_button_get_active(button), + gtk_button_get_image(GTK_BUTTON(button)), + Q_RANDOM); } void __queue_repeat(GtkToggleButton *button, gpointer data) { - __queue_toggle_button(button, Q_REPEAT); + __queue_toggle_flag(gtk_toggle_button_get_active(button), + gtk_button_get_image(GTK_BUTTON(button)), + Q_REPEAT); } void __queue_disabled(GtkSwitch *enabled, GParamSpec *pspec, gpointer data) { - if (gq_queue == NULL) - return; - - if (gtk_switch_get_active(enabled)) - queue_set_flag(gq_queue->gq_queue, Q_ENABLED); - else - queue_unset_flag(gq_queue->gq_queue, Q_ENABLED); + __queue_toggle_flag(gtk_switch_get_active(enabled), + gui_builder_widget("o_treeview"), + Q_ENABLED); } struct gui_queue *gui_queue_alloc(struct queue *queue, const gchar *text, @@ -64,8 +61,10 @@ struct gui_queue *gui_queue_alloc(struct queue *queue, const gchar *text, void gui_queue_free(struct queue *queue) { - struct gui_queue *gq = gui_queue(queue); + GtkTreeView *treeview = GTK_TREE_VIEW(gui_builder_widget("o_treeview")); + struct gui_queue *gq = gui_queue(queue); + gtk_tree_view_set_model(treeview, NULL); queue->q_private = NULL; g_object_unref(gq->gq_model); @@ -75,6 +74,7 @@ void gui_queue_free(struct queue *queue) void gui_queue_show(struct gui_queue *queue) { + GtkTreeView *view = GTK_TREE_VIEW(gui_builder_widget("o_treeview")); GtkButton *random = GTK_BUTTON(gui_builder_widget("o_random")); GtkButton *repeat = GTK_BUTTON(gui_builder_widget("o_repeat")); GtkSwitch *enabled = GTK_SWITCH(gui_builder_widget("o_enable")); @@ -91,6 +91,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); + gtk_tree_view_set_model(view, GTK_TREE_MODEL(queue->gq_model)); } gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(random), has_random); @@ -103,6 +104,7 @@ void gui_queue_show(struct gui_queue *queue) */ gtk_widget_set_sensitive(gtk_button_get_image(random), has_random); gtk_widget_set_sensitive(gtk_button_get_image(repeat), has_repeat); + gtk_widget_set_sensitive(GTK_WIDGET(view), is_enabled); gtk_widget_set_sensitive(GTK_WIDGET(search), queue != NULL); gtk_entry_set_text(search, ""); diff --git a/share/ocarina/ocarina6.glade b/share/ocarina/ocarina6.glade index 72c0ad0f..cac3dad4 100644 --- a/share/ocarina/ocarina6.glade +++ b/share/ocarina/ocarina6.glade @@ -1097,6 +1097,167 @@ 0 + + + True + True + in + + + True + True + False + True + 9 + + + multiple + + + + + True + fixed + 20 + # + True + + + + 0 + + + + + + + True + fixed + 300 + Title + True + + + + 1 + + + + + + + True + fixed + 60 + Length + True + + + + 2 + + + + + + + True + fixed + 100 + Artist + True + + + + 3 + + + + + + + True + fixed + 100 + Album + True + + + + 4 + + + + + + + True + fixed + 45 + Year + True + + + + 5 + + + + + + + True + fixed + 100 + Genre + True + + + + 6 + + + + + + + True + fixed + 60 + Count + True + + + + 7 + + + + + + + True + fixed + 1 + Played + True + + + + 8 + + + + + + + + + True + True + 1 + + True @@ -1116,7 +1277,7 @@ True True - 1 + 2 diff --git a/tests/gui/queue.c b/tests/gui/queue.c index 0045dcf2..db89d98b 100644 --- a/tests/gui/queue.c +++ b/tests/gui/queue.c @@ -33,6 +33,7 @@ static void test_queue() { GtkToggleButton *random, *repeat; GtkWidget *random_img, *repeat_img; + GtkTreeView *treeview; struct gui_queue *gq; GtkSwitch *enable; GtkEntry *search; @@ -47,6 +48,7 @@ static void test_queue() repeat = GTK_TOGGLE_BUTTON(gui_builder_widget("o_repeat")); random_img = gtk_button_get_image(GTK_BUTTON(random)); repeat_img = gtk_button_get_image(GTK_BUTTON(repeat)); + treeview = GTK_TREE_VIEW(gui_builder_widget("o_treeview")); /* Test initialization */ queue_init(&q, 0, &test_ops); @@ -67,9 +69,10 @@ static void test_queue() /* Show a queue where random, repeat, and switch are disabled */ gui_queue_show(gq); - test_equal(gtk_widget_get_sensitive(GTK_WIDGET(random)), false); - test_equal(gtk_widget_get_sensitive(GTK_WIDGET(repeat)), false); - test_equal(gtk_widget_get_sensitive(GTK_WIDGET(enable)), false); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(random)), false); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(repeat)), false); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(enable)), false); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(treeview)), false); test_equal(gtk_toggle_button_get_active(random), false); test_equal(gtk_toggle_button_get_active(repeat), false); test_equal(gtk_switch_get_active(enable), false); @@ -97,30 +100,34 @@ static void test_queue() /* Test clicking enabled switch. */ gtk_switch_set_active(enable, true); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(treeview)), true); test_equal(queue_has_flag(&q, Q_ENABLED), (bool)true); gtk_switch_set_active(enable, false); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(treeview)), false); test_equal(queue_has_flag(&q, Q_ENABLED), (bool)false); - /* Show a queue where random and repeat are enabled */ + /* Show a queue where random, repeat, and switch are enabled */ gq->gq_flags = GQ_CAN_RANDOM | GQ_CAN_REPEAT | GQ_CAN_DISABLE; - q.q_flags = Q_RANDOM | Q_REPEAT; + q.q_flags = Q_RANDOM | Q_REPEAT | Q_ENABLED; gui_queue_show(gq); - test_equal(gtk_widget_get_sensitive(GTK_WIDGET(random)), true); - test_equal(gtk_widget_get_sensitive(GTK_WIDGET(repeat)), true); - test_equal(gtk_widget_get_sensitive(GTK_WIDGET(enable)), true); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(random)), true); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(repeat)), true); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(enable)), true); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(treeview)), true); test_equal(gtk_toggle_button_get_active(random), true); test_equal(gtk_toggle_button_get_active(repeat), true); - test_equal(gtk_switch_get_active(enable), false); + test_equal(gtk_switch_get_active(enable), true); test_equal(gtk_widget_get_sensitive(random_img), true); test_equal(gtk_widget_get_sensitive(repeat_img), true); /* Attempt to show a NULL pointer */ gui_queue_show(NULL); - test_equal(gtk_widget_get_sensitive(GTK_WIDGET(search)), false); - test_equal(gtk_widget_get_sensitive(GTK_WIDGET(random)), false); - test_equal(gtk_widget_get_sensitive(GTK_WIDGET(repeat)), false); - test_equal(gtk_widget_get_sensitive(GTK_WIDGET(enable)), false); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(search)), false); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(random)), false); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(repeat)), false); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(enable)), false); + test_equal(gtk_widget_get_sensitive(GTK_WIDGET(treeview)), false); test_equal(gtk_toggle_button_get_active(random), false); test_equal(gtk_toggle_button_get_active(repeat), false); test_equal(gtk_switch_get_active(enable), false);