Finally implemented volume sets as well (for NetBSD/Solaris...)

This commit is contained in:
Pierre Pronchery 2012-03-21 17:02:35 +00:00
parent 185aa3749f
commit 97237f216a
2 changed files with 25 additions and 13 deletions

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Mixer 0.0.1\n" "Project-Id-Version: Mixer 0.0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-03-21 17:49+0100\n" "POT-Creation-Date: 2012-03-21 18:00+0100\n"
"PO-Revision-Date: 2010-04-23 04:08+0200\n" "PO-Revision-Date: 2010-04-23 04:08+0200\n"
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n" "Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
"Language-Team: French\n" "Language-Team: French\n"
@ -96,30 +96,30 @@ msgstr "Tous"
msgid "Mute" msgid "Mute"
msgstr "Muet" msgstr "Muet"
#: ../src/mixer.c:686 #: ../src/mixer.c:692
msgid "Bind" msgid "Bind"
msgstr "Lier" msgstr "Lier"
#: ../src/mixer.c:877 #: ../src/mixer.c:889
msgid "translator-credits" msgid "translator-credits"
msgstr "Pierre Pronchery <khorben@defora.org>" msgstr "Pierre Pronchery <khorben@defora.org>"
#: ../src/mixer.c:910 #: ../src/mixer.c:922
msgid "Mixer properties" msgid "Mixer properties"
msgstr "Propriétés du mixer" msgstr "Propriétés du mixer"
#: ../src/mixer.c:926 #: ../src/mixer.c:938
msgid "Name: " msgid "Name: "
msgstr "Nom : " msgstr "Nom : "
#: ../src/mixer.c:936 #: ../src/mixer.c:948
msgid "Version: " msgid "Version: "
msgstr "Version : " msgstr "Version : "
#: ../src/mixer.c:946 #: ../src/mixer.c:958
msgid "Device: " msgid "Device: "
msgstr "Carte : " msgstr "Carte : "
#: ../src/mixer.c:1029 ../src/mixer.c:1034 #: ../src/mixer.c:1041 ../src/mixer.c:1046
msgid "Error" msgid "Error"
msgstr "Erreur" msgstr "Erreur"

View File

@ -584,7 +584,7 @@ static GtkWidget * _new_enum(Mixer * mixer, int dev,
if((q = malloc(sizeof(*q))) != NULL) if((q = malloc(sizeof(*q))) != NULL)
{ {
*q = e->member[i].ord; *q = e->member[i].ord;
g_object_set_data(G_OBJECT(widget), "ord", mc); g_object_set_data(G_OBJECT(widget), "ord", q);
} }
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);
@ -631,6 +631,7 @@ static GtkWidget * _new_set(Mixer * mixer, int dev, struct audio_mixer_set * s)
GtkWidget * vbox; GtkWidget * vbox;
int i; int i;
GtkWidget * widget; GtkWidget * widget;
int * q;
if(s->num_mem <= 0 || (mc = malloc(sizeof(*mc))) == NULL) if(s->num_mem <= 0 || (mc = malloc(sizeof(*mc))) == NULL)
return NULL; return NULL;
@ -648,6 +649,11 @@ static GtkWidget * _new_set(Mixer * mixer, int dev, struct audio_mixer_set * s)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
TRUE); TRUE);
g_object_set_data(G_OBJECT(widget), "ctrl", mc); g_object_set_data(G_OBJECT(widget), "ctrl", mc);
if((q = malloc(sizeof(*q))) != NULL)
{
*q = s->member[i].mask;
g_object_set_data(G_OBJECT(widget), "mask", q);
}
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, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
@ -794,6 +800,7 @@ int mixer_set_mute(Mixer * mixer, GtkWidget * widget)
/* mixer_set_set */ /* mixer_set_set */
int mixer_set_set(Mixer * mixer, GtkWidget * widget) int mixer_set_set(Mixer * mixer, GtkWidget * widget)
{ {
gboolean active;
#ifdef AUDIO_MIXER_DEVINFO #ifdef AUDIO_MIXER_DEVINFO
mixer_ctrl_t * p; mixer_ctrl_t * p;
int * q; int * q;
@ -802,18 +809,23 @@ int mixer_set_set(Mixer * mixer, GtkWidget * widget)
fprintf(stderr, "DEBUG: %s(%p) fd=%d\n", __func__, (void *)mixer, fprintf(stderr, "DEBUG: %s(%p) fd=%d\n", __func__, (void *)mixer,
mixer->fd); mixer->fd);
# endif # endif
active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
p = g_object_get_data(G_OBJECT(widget), "ctrl"); p = g_object_get_data(G_OBJECT(widget), "ctrl");
q = g_object_get_data(G_OBJECT(widget), "ord"); q = g_object_get_data(G_OBJECT(widget), "mask");
if(p == NULL || q == NULL) if(p == NULL || q == NULL)
return 1; return 1;
p->un.ord = *q; if(ioctl(mixer->fd, AUDIO_MIXER_READ, p) != 0)
return -_mixer_error(mixer, "AUDIO_MIXER_READ", 1);
p->un.mask = (active) ? (p->un.mask | *q)
: (p->un.mask - (p->un.mask & *q));
# ifdef DEBUG # ifdef DEBUG
fprintf(stderr, "DEBUG: %s(%p) fd=%d ord=%d\n", __func__, (void *)mixer, fprintf(stderr, "DEBUG: %s(%p) fd=%d mask=%d\n", __func__,
mixer->fd, p->un.ord); (void *)mixer, mixer->fd, p->un.mask);
# endif # endif
if(ioctl(mixer->fd, AUDIO_MIXER_WRITE, p) != 0) if(ioctl(mixer->fd, AUDIO_MIXER_WRITE, p) != 0)
return -_mixer_error(mixer, "AUDIO_MIXER_WRITE", 1); return -_mixer_error(mixer, "AUDIO_MIXER_WRITE", 1);
#else #else
active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
/* FIXME implement */ /* FIXME implement */
#endif #endif
return 0; return 0;