gui/queue: Respond to toggling the random and repeat buttons

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2016-01-14 10:24:10 -05:00
parent ddbc040a3b
commit 24f53d88b6
3 changed files with 55 additions and 0 deletions

View File

@ -4,6 +4,39 @@
#include <gui/builder.h>
#include <gui/queue.h>
static struct gui_queue *gq_queue = NULL;
static void __queue_toggle_button(GtkToggleButton *button,
enum queue_flags flag)
{
GtkWidget *image = gtk_button_get_image(GTK_BUTTON(button));
if (gq_queue == NULL)
return;
/*
* Some GTK themes have trouble with toggle buttons,
* so let's help users by changing image sensitivity.
*/
if (gtk_toggle_button_get_active(button)) {
queue_set_flag(gq_queue->gq_queue, flag);
gtk_widget_set_sensitive(image, true);
} else {
queue_unset_flag(gq_queue->gq_queue, flag);
gtk_widget_set_sensitive(image, false);
}
}
void __queue_random(GtkToggleButton *button, gpointer data)
{
__queue_toggle_button(button, Q_RANDOM);
}
void __queue_repeat(GtkToggleButton *button, gpointer data)
{
__queue_toggle_button(button, Q_REPEAT);
}
struct gui_queue *gui_queue_alloc(struct queue *queue, const gchar *text,
unsigned int flags)
{
@ -32,6 +65,8 @@ void gui_queue_show(struct gui_queue *queue)
GtkButton *repeat = GTK_BUTTON(gui_builder_widget("o_repeat"));
bool has_random = false, has_repeat = false;
gq_queue = queue;
gtk_widget_set_sensitive(GTK_WIDGET(random), gui_queue_can_random(queue));
gtk_widget_set_sensitive(GTK_WIDGET(repeat), gui_queue_can_repeat(queue));

View File

@ -635,6 +635,7 @@
<property name="receives_default">True</property>
<property name="valign">center</property>
<property name="image">image9</property>
<signal name="toggled" handler="__queue_random" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@ -650,6 +651,7 @@
<property name="receives_default">True</property>
<property name="valign">center</property>
<property name="image">image10</property>
<signal name="toggled" handler="__queue_repeat" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>

View File

@ -59,6 +59,24 @@ static void test_queue()
test_equal(gtk_widget_get_sensitive(random_img), false);
test_equal(gtk_widget_get_sensitive(repeat_img), false);
/* Test clicking random button. */
gtk_toggle_button_set_active(random, true);
test_equal(gtk_widget_get_sensitive(random_img), true);
test_equal(queue_has_flag(&q, Q_RANDOM), (bool)true);
gtk_toggle_button_set_active(random, false);
test_equal(gtk_widget_get_sensitive(random_img), false);
test_equal(queue_has_flag(&q, Q_RANDOM), (bool)false);
/* Test clicking repeat button. */
gtk_toggle_button_set_active(repeat, true);
test_equal(gtk_widget_get_sensitive(repeat_img), true);
test_equal(queue_has_flag(&q, Q_REPEAT), (bool)true);
gtk_toggle_button_set_active(repeat, false);
test_equal(gtk_widget_get_sensitive(repeat_img), false);
test_equal(queue_has_flag(&q, Q_REPEAT), (bool)false);
/* Show a queue where random and repeat are enabled */
gq->gq_flags = GQ_CAN_RANDOM | GQ_CAN_REPEAT;
q.q_flags = Q_RANDOM | Q_REPEAT;