Use a GtkSwitch to mute channels with Gtk+ 3
This commit is contained in:
parent
6d2b277302
commit
f99653a4fb
35
src/mixer.c
35
src/mixer.c
|
@ -124,7 +124,12 @@ static GtkWidget * _new_mute(Mixer * mixer, int dev,
|
||||||
static GtkWidget * _new_set(Mixer * mixer, int dev, struct audio_mixer_set * s);
|
static GtkWidget * _new_set(Mixer * mixer, int dev, struct audio_mixer_set * s);
|
||||||
/* callbacks */
|
/* callbacks */
|
||||||
static void _new_enum_on_toggled(GtkWidget * widget, gpointer data);
|
static void _new_enum_on_toggled(GtkWidget * widget, gpointer data);
|
||||||
|
#if GTK_CHECK_VERSION(3, 0, 0)
|
||||||
|
static void _new_mute_on_notify(GObject * object, GParamSpec * spec,
|
||||||
|
gpointer data);
|
||||||
|
#else
|
||||||
static void _new_mute_on_toggled(GtkWidget * widget, gpointer data);
|
static void _new_mute_on_toggled(GtkWidget * widget, gpointer data);
|
||||||
|
#endif
|
||||||
static void _new_set_on_toggled(GtkWidget * widget, gpointer data);
|
static void _new_set_on_toggled(GtkWidget * widget, gpointer data);
|
||||||
#endif
|
#endif
|
||||||
static GtkWidget * _new_value(Mixer * mixer, int index, GtkWidget ** bbox);
|
static GtkWidget * _new_value(Mixer * mixer, int index, GtkWidget ** bbox);
|
||||||
|
@ -507,7 +512,9 @@ static GtkWidget * _new_mute(Mixer * mixer, int dev,
|
||||||
struct audio_mixer_enum * e)
|
struct audio_mixer_enum * e)
|
||||||
{
|
{
|
||||||
MixerControl * mc;
|
MixerControl * mc;
|
||||||
|
#if !GTK_CHECK_VERSION(3, 0, 0)
|
||||||
GtkWidget * hbox;
|
GtkWidget * hbox;
|
||||||
|
#endif
|
||||||
GtkWidget * widget;
|
GtkWidget * widget;
|
||||||
gboolean active;
|
gboolean active;
|
||||||
|
|
||||||
|
@ -519,10 +526,15 @@ static GtkWidget * _new_mute(Mixer * mixer, int dev,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
# if GTK_CHECK_VERSION(3, 0, 0)
|
# if GTK_CHECK_VERSION(3, 0, 0)
|
||||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4);
|
widget = gtk_switch_new();
|
||||||
|
active = (strcmp(e->member[mc->un.ord].label.name, "on") == 0)
|
||||||
|
? FALSE : TRUE;
|
||||||
|
gtk_switch_set_active(GTK_SWITCH(widget), active);
|
||||||
|
g_object_set_data(G_OBJECT(widget), "ctrl", mc);
|
||||||
|
g_signal_connect(widget, "notify::active",
|
||||||
|
G_CALLBACK(_new_mute_on_notify), mixer);
|
||||||
# else
|
# else
|
||||||
hbox = gtk_hbox_new(FALSE, 4);
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
# endif
|
|
||||||
widget = gtk_image_new_from_icon_name("audio-volume-muted",
|
widget = gtk_image_new_from_icon_name("audio-volume-muted",
|
||||||
GTK_ICON_SIZE_BUTTON);
|
GTK_ICON_SIZE_BUTTON);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
@ -536,6 +548,7 @@ static GtkWidget * _new_mute(Mixer * mixer, int dev,
|
||||||
g_object_set_data(G_OBJECT(widget), "ctrl", mc);
|
g_object_set_data(G_OBJECT(widget), "ctrl", mc);
|
||||||
g_signal_connect(widget, "toggled", G_CALLBACK(_new_mute_on_toggled),
|
g_signal_connect(widget, "toggled", G_CALLBACK(_new_mute_on_toggled),
|
||||||
mixer);
|
mixer);
|
||||||
|
# endif
|
||||||
return widget;
|
return widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -589,12 +602,22 @@ static void _new_enum_on_toggled(GtkWidget * widget, gpointer data)
|
||||||
mixer_set_enum(mixer, widget);
|
mixer_set_enum(mixer, widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if GTK_CHECK_VERSION(3, 0, 0)
|
||||||
|
static void _new_mute_on_notify(GObject * object, GParamSpec * spec,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
Mixer * mixer = data;
|
||||||
|
|
||||||
|
mixer_set_mute(mixer, GTK_WIDGET(object));
|
||||||
|
}
|
||||||
|
#else
|
||||||
static void _new_mute_on_toggled(GtkWidget * widget, gpointer data)
|
static void _new_mute_on_toggled(GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
Mixer * mixer = data;
|
Mixer * mixer = data;
|
||||||
|
|
||||||
mixer_set_mute(mixer, widget);
|
mixer_set_mute(mixer, widget);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void _new_set_on_toggled(GtkWidget * widget, gpointer data)
|
static void _new_set_on_toggled(GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
|
@ -809,9 +832,15 @@ int mixer_set_mute(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
|
||||||
p = g_object_get_data(G_OBJECT(widget), "ctrl");
|
if((p = g_object_get_data(G_OBJECT(widget), "ctrl")) == NULL)
|
||||||
|
return -1;
|
||||||
|
#if GTK_CHECK_VERSION(3, 0, 0)
|
||||||
|
p->un.ord = gtk_switch_get_active(GTK_SWITCH(widget))
|
||||||
|
? 0 : 1; /* XXX assumes 1 is "off" */
|
||||||
|
#else
|
||||||
p->un.ord = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
|
p->un.ord = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
|
||||||
? 1 : 0; /* XXX assumes 0 is "off" */
|
? 1 : 0; /* XXX assumes 0 is "off" */
|
||||||
|
#endif
|
||||||
# ifdef DEBUG
|
# ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s(%p) fd=%d ord=%d\n", __func__, (void *)mixer,
|
fprintf(stderr, "DEBUG: %s(%p) fd=%d ord=%d\n", __func__, (void *)mixer,
|
||||||
mixer->fd, p->un.ord);
|
mixer->fd, p->un.ord);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user