Displaying correct values

This commit is contained in:
Pierre Pronchery 2009-12-13 15:27:46 +00:00
parent b6b80918eb
commit 7ed544e7a8

View File

@ -90,8 +90,9 @@ static DesktopMenubar _mixer_menubar[] =
/* public */ /* public */
/* mixer_new */ /* mixer_new */
static GtkWidget * _new_enum(Mixer * mixer, struct audio_mixer_enum * e); static GtkWidget * _new_enum(Mixer * mixer, int dev,
static GtkWidget * _new_set(Mixer * mixer, struct audio_mixer_set * s); struct audio_mixer_enum * e);
static GtkWidget * _new_set(Mixer * mixer, int dev, struct audio_mixer_set * s);
static GtkWidget * _new_value(Mixer * mixer, int dev, static GtkWidget * _new_value(Mixer * mixer, int dev,
struct audio_mixer_value * v); struct audio_mixer_value * v);
@ -177,10 +178,10 @@ Mixer * mixer_new(void)
switch(md.type) switch(md.type)
{ {
case AUDIO_MIXER_ENUM: case AUDIO_MIXER_ENUM:
control = _new_enum(mixer, &md.un.e); control = _new_enum(mixer, i, &md.un.e);
break; break;
case AUDIO_MIXER_SET: case AUDIO_MIXER_SET:
control = _new_set(mixer, &md.un.s); control = _new_set(mixer, i, &md.un.s);
break; break;
case AUDIO_MIXER_VALUE: case AUDIO_MIXER_VALUE:
control = _new_value(mixer, i, &md.un.v); control = _new_value(mixer, i, &md.un.v);
@ -202,8 +203,10 @@ Mixer * mixer_new(void)
return mixer; return mixer;
} }
static GtkWidget * _new_enum(Mixer * mixer, struct audio_mixer_enum * e) static GtkWidget * _new_enum(Mixer * mixer, int dev,
struct audio_mixer_enum * e)
{ {
mixer_ctrl_t * p;
GtkWidget * vbox; GtkWidget * vbox;
int i; int i;
GtkWidget * widget; GtkWidget * widget;
@ -211,12 +214,26 @@ static GtkWidget * _new_enum(Mixer * mixer, struct audio_mixer_enum * e)
if(e->num_mem <= 0) if(e->num_mem <= 0)
return NULL; return NULL;
/* XXX copy/paste */
if((p = malloc(sizeof(*p))) == NULL)
return NULL;
p->dev = dev;
p->type = AUDIO_MIXER_ENUM;
if(ioctl(mixer->fd, AUDIO_MIXER_READ, p) != 0)
{
free(p);
p = NULL;
}
vbox = gtk_vbox_new(TRUE, 0); vbox = gtk_vbox_new(TRUE, 0);
for(i = 0; i < e->num_mem; i++) for(i = 0; i < e->num_mem; i++)
{ {
widget = gtk_radio_button_new_with_label(group, widget = gtk_radio_button_new_with_label(group,
e->member[i].label.name); e->member[i].label.name);
group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(widget)); group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(widget));
if(p->un.ord == i)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
TRUE);
g_object_set_data(G_OBJECT(widget), "ctrl", p);
g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK( g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(
on_enum_toggled), mixer); on_enum_toggled), mixer);
gtk_box_pack_start(GTK_BOX(vbox), widget, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), widget, TRUE, TRUE, 0);
@ -224,19 +241,34 @@ static GtkWidget * _new_enum(Mixer * mixer, struct audio_mixer_enum * e)
return vbox; return vbox;
} }
static GtkWidget * _new_set(Mixer * mixer, struct audio_mixer_set * s) static GtkWidget * _new_set(Mixer * mixer, int dev, struct audio_mixer_set * s)
{ {
mixer_ctrl_t * p;
GtkWidget * vbox; GtkWidget * vbox;
int i; int i;
GtkWidget * widget; GtkWidget * widget;
if(s->num_mem <= 0) if(s->num_mem <= 0)
return NULL; return NULL;
/* XXX copy/paste */
if((p = malloc(sizeof(*p))) == NULL)
return NULL;
p->dev = dev;
p->type = AUDIO_MIXER_SET;
if(ioctl(mixer->fd, AUDIO_MIXER_READ, p) != 0)
{
free(p);
p = NULL;
}
vbox = gtk_vbox_new(TRUE, 0); vbox = gtk_vbox_new(TRUE, 0);
for(i = 0; i < s->num_mem; i++) for(i = 0; i < s->num_mem; i++)
{ {
widget = gtk_check_button_new_with_label( widget = gtk_check_button_new_with_label(
s->member[i].label.name); s->member[i].label.name);
if(p->un.mask & (1 << i))
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
TRUE);
g_object_set_data(G_OBJECT(widget), "ctrl", p);
g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK( g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(
on_set_toggled), mixer); on_set_toggled), mixer);
gtk_box_pack_start(GTK_BOX(vbox), widget, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), widget, TRUE, TRUE, 0);
@ -247,11 +279,11 @@ static GtkWidget * _new_set(Mixer * mixer, struct audio_mixer_set * s)
static GtkWidget * _new_value(Mixer * mixer, int dev, static GtkWidget * _new_value(Mixer * mixer, int dev,
struct audio_mixer_value * v) struct audio_mixer_value * v)
{ {
mixer_ctrl_t * p;
GtkWidget * vbox; GtkWidget * vbox;
GtkWidget * hbox; GtkWidget * hbox;
int i; int i;
GtkWidget * widget; GtkWidget * widget;
mixer_ctrl_t * p;
if(v->num_channels <= 0) if(v->num_channels <= 0)
return NULL; return NULL;