gvc: Update from gnome-control-center

https://bugzilla.gnome.org/show_bug.cgi?id=644511
This commit is contained in:
Bastien Nocera 2011-03-11 15:30:35 +00:00
parent 74314bacd7
commit f8cdaaae30
10 changed files with 98 additions and 156 deletions

View File

@ -157,7 +157,7 @@ gvc_mixer_card_get_profile (GvcMixerCard *card)
GList *l; GList *l;
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL); g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
g_return_val_if_fail (card->priv->profiles != NULL, FALSE); g_return_val_if_fail (card->priv->profiles != NULL, NULL);
for (l = card->priv->profiles; l != NULL; l = l->next) { for (l = card->priv->profiles; l != NULL; l = l->next) {
GvcMixerCardProfile *p = l->data; GvcMixerCardProfile *p = l->data;
@ -266,7 +266,7 @@ gvc_mixer_card_change_profile (GvcMixerCard *card,
const GList * const GList *
gvc_mixer_card_get_profiles (GvcMixerCard *card) gvc_mixer_card_get_profiles (GvcMixerCard *card)
{ {
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE); g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
return card->priv->profiles; return card->priv->profiles;
} }

View File

@ -615,13 +615,13 @@ static void
update_default_source_from_name (GvcMixerControl *control, update_default_source_from_name (GvcMixerControl *control,
const char *name) const char *name)
{ {
gboolean changed; gboolean changed = FALSE;
if ((control->priv->default_source_name == NULL if ((control->priv->default_source_name == NULL
&& name != NULL) && name != NULL)
|| (control->priv->default_source_name != NULL || (control->priv->default_source_name != NULL
&& name == NULL) && name == NULL)
|| strcmp (control->priv->default_source_name, name) != 0) { || (name != NULL && strcmp (control->priv->default_source_name, name) != 0)) {
changed = TRUE; changed = TRUE;
} }
@ -640,13 +640,13 @@ static void
update_default_sink_from_name (GvcMixerControl *control, update_default_sink_from_name (GvcMixerControl *control,
const char *name) const char *name)
{ {
gboolean changed; gboolean changed = FALSE;
if ((control->priv->default_sink_name == NULL if ((control->priv->default_sink_name == NULL
&& name != NULL) && name != NULL)
|| (control->priv->default_sink_name != NULL || (control->priv->default_sink_name != NULL
&& name == NULL) && name == NULL)
|| strcmp (control->priv->default_sink_name, name) != 0) { || (name != NULL && strcmp (control->priv->default_sink_name, name) != 0)) {
changed = TRUE; changed = TRUE;
} }
@ -710,6 +710,58 @@ add_stream (GvcMixerControl *control,
gvc_mixer_stream_get_id (stream)); gvc_mixer_stream_get_id (stream));
} }
static void
set_icon_name_from_proplist (GvcMixerStream *stream,
pa_proplist *l,
const char *default_icon_name)
{
const char *t;
if ((t = pa_proplist_gets (l, PA_PROP_DEVICE_ICON_NAME))) {
goto finish;
}
if ((t = pa_proplist_gets (l, PA_PROP_MEDIA_ICON_NAME))) {
goto finish;
}
if ((t = pa_proplist_gets (l, PA_PROP_WINDOW_ICON_NAME))) {
goto finish;
}
if ((t = pa_proplist_gets (l, PA_PROP_APPLICATION_ICON_NAME))) {
goto finish;
}
if ((t = pa_proplist_gets (l, PA_PROP_MEDIA_ROLE))) {
if (strcmp (t, "video") == 0 ||
strcmp (t, "phone") == 0) {
goto finish;
}
if (strcmp (t, "music") == 0) {
t = "audio";
goto finish;
}
if (strcmp (t, "game") == 0) {
t = "applications-games";
goto finish;
}
if (strcmp (t, "event") == 0) {
t = "dialog-information";
goto finish;
}
}
t = default_icon_name;
finish:
gvc_mixer_stream_set_icon_name (stream, t);
}
static void static void
update_sink (GvcMixerControl *control, update_sink (GvcMixerControl *control,
const pa_sink_info *info) const pa_sink_info *info)
@ -767,7 +819,7 @@ update_sink (GvcMixerControl *control,
gvc_mixer_stream_set_name (stream, info->name); gvc_mixer_stream_set_name (stream, info->name);
gvc_mixer_stream_set_card_index (stream, info->card); gvc_mixer_stream_set_card_index (stream, info->card);
gvc_mixer_stream_set_description (stream, info->description); gvc_mixer_stream_set_description (stream, info->description);
gvc_mixer_stream_set_icon_name (stream, "audio-card"); set_icon_name_from_proplist (stream, info->proplist, "audio-card");
gvc_mixer_stream_set_volume (stream, (guint)max_volume); gvc_mixer_stream_set_volume (stream, (guint)max_volume);
gvc_mixer_stream_set_is_muted (stream, info->mute); gvc_mixer_stream_set_is_muted (stream, info->mute);
gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SINK_DECIBEL_VOLUME)); gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SINK_DECIBEL_VOLUME));
@ -856,7 +908,7 @@ update_source (GvcMixerControl *control,
gvc_mixer_stream_set_name (stream, info->name); gvc_mixer_stream_set_name (stream, info->name);
gvc_mixer_stream_set_card_index (stream, info->card); gvc_mixer_stream_set_card_index (stream, info->card);
gvc_mixer_stream_set_description (stream, info->description); gvc_mixer_stream_set_description (stream, info->description);
gvc_mixer_stream_set_icon_name (stream, "audio-input-microphone"); set_icon_name_from_proplist (stream, info->proplist, "audio-input-microphone");
gvc_mixer_stream_set_volume (stream, (guint)max_volume); gvc_mixer_stream_set_volume (stream, (guint)max_volume);
gvc_mixer_stream_set_is_muted (stream, info->mute); gvc_mixer_stream_set_is_muted (stream, info->mute);
gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SOURCE_DECIBEL_VOLUME)); gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SOURCE_DECIBEL_VOLUME));
@ -880,54 +932,6 @@ update_source (GvcMixerControl *control,
} }
} }
static void
set_icon_name_from_proplist (GvcMixerStream *stream,
pa_proplist *l,
const char *default_icon_name)
{
const char *t;
if ((t = pa_proplist_gets (l, PA_PROP_MEDIA_ICON_NAME))) {
goto finish;
}
if ((t = pa_proplist_gets (l, PA_PROP_WINDOW_ICON_NAME))) {
goto finish;
}
if ((t = pa_proplist_gets (l, PA_PROP_APPLICATION_ICON_NAME))) {
goto finish;
}
if ((t = pa_proplist_gets (l, PA_PROP_MEDIA_ROLE))) {
if (strcmp (t, "video") == 0 ||
strcmp (t, "phone") == 0) {
goto finish;
}
if (strcmp (t, "music") == 0) {
t = "audio";
goto finish;
}
if (strcmp (t, "game") == 0) {
t = "applications-games";
goto finish;
}
if (strcmp (t, "event") == 0) {
t = "dialog-information";
goto finish;
}
}
t = default_icon_name;
finish:
gvc_mixer_stream_set_icon_name (stream, t);
}
static void static void
set_is_event_stream_from_proplist (GvcMixerStream *stream, set_is_event_stream_from_proplist (GvcMixerStream *stream,
pa_proplist *l) pa_proplist *l)
@ -1121,7 +1125,7 @@ update_card (GvcMixerControl *control,
const pa_card_info *info) const pa_card_info *info)
{ {
GvcMixerCard *card; GvcMixerCard *card;
gboolean is_new; gboolean is_new = FALSE;
#if 1 #if 1
guint i; guint i;
const char *key; const char *key;
@ -1989,6 +1993,11 @@ gvc_mixer_control_dispose (GObject *object)
{ {
GvcMixerControl *control = GVC_MIXER_CONTROL (object); GvcMixerControl *control = GVC_MIXER_CONTROL (object);
if (control->priv->reconnect_id != 0) {
g_source_remove (control->priv->reconnect_id);
control->priv->reconnect_id = 0;
}
if (control->priv->pa_context != NULL) { if (control->priv->pa_context != NULL) {
pa_context_unref (control->priv->pa_context); pa_context_unref (control->priv->pa_context);
control->priv->pa_context = NULL; control->priv->pa_context = NULL;
@ -2230,3 +2239,20 @@ gvc_mixer_control_new (const char *name)
NULL); NULL);
return GVC_MIXER_CONTROL (control); return GVC_MIXER_CONTROL (control);
} }
/* FIXME: Remove when PA 0.9.23 is used */
#ifndef PA_VOLUME_UI_MAX
#define PA_VOLUME_UI_MAX pa_sw_volume_from_dB(+11.0)
#endif
gdouble
gvc_mixer_control_get_vol_max_norm (GvcMixerControl *control)
{
return (gdouble) PA_VOLUME_NORM;
}
gdouble
gvc_mixer_control_get_vol_max_amplified (GvcMixerControl *control)
{
return (gdouble) PA_VOLUME_UI_MAX;
}

View File

@ -91,6 +91,9 @@ gboolean gvc_mixer_control_set_default_sink (GvcMixerControl *con
gboolean gvc_mixer_control_set_default_source (GvcMixerControl *control, gboolean gvc_mixer_control_set_default_source (GvcMixerControl *control,
GvcMixerStream *stream); GvcMixerStream *stream);
gdouble gvc_mixer_control_get_vol_max_norm (GvcMixerControl *control);
gdouble gvc_mixer_control_get_vol_max_amplified (GvcMixerControl *control);
G_END_DECLS G_END_DECLS
#endif /* __GVC_MIXER_CONTROL_H */ #endif /* __GVC_MIXER_CONTROL_H */

View File

@ -156,25 +156,12 @@ gvc_mixer_event_role_get_property (GObject *object,
} }
} }
static GObject *
gvc_mixer_event_role_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_params)
{
GObject *object;
object = G_OBJECT_CLASS (gvc_mixer_event_role_parent_class)->constructor (type, n_construct_properties, construct_params);
return object;
}
static void static void
gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass) gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass); GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
object_class->constructor = gvc_mixer_event_role_constructor;
object_class->finalize = gvc_mixer_event_role_finalize; object_class->finalize = gvc_mixer_event_role_finalize;
object_class->set_property = gvc_mixer_event_role_set_property; object_class->set_property = gvc_mixer_event_role_set_property;
object_class->get_property = gvc_mixer_event_role_get_property; object_class->get_property = gvc_mixer_event_role_get_property;

View File

@ -43,7 +43,6 @@ struct GvcMixerSinkInputPrivate
static void gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass); static void gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass);
static void gvc_mixer_sink_input_init (GvcMixerSinkInput *mixer_sink_input); static void gvc_mixer_sink_input_init (GvcMixerSinkInput *mixer_sink_input);
static void gvc_mixer_sink_input_finalize (GObject *object); static void gvc_mixer_sink_input_finalize (GObject *object);
static void gvc_mixer_sink_input_dispose (GObject *object);
G_DEFINE_TYPE (GvcMixerSinkInput, gvc_mixer_sink_input, GVC_TYPE_MIXER_STREAM) G_DEFINE_TYPE (GvcMixerSinkInput, gvc_mixer_sink_input, GVC_TYPE_MIXER_STREAM)
@ -107,26 +106,12 @@ gvc_mixer_sink_input_change_is_muted (GvcMixerStream *stream,
return TRUE; return TRUE;
} }
static GObject *
gvc_mixer_sink_input_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_params)
{
GObject *object;
object = G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->constructor (type, n_construct_properties, construct_params);
return object;
}
static void static void
gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass) gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass); GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
object_class->constructor = gvc_mixer_sink_input_constructor;
object_class->dispose = gvc_mixer_sink_input_dispose;
object_class->finalize = gvc_mixer_sink_input_finalize; object_class->finalize = gvc_mixer_sink_input_finalize;
stream_class->push_volume = gvc_mixer_sink_input_push_volume; stream_class->push_volume = gvc_mixer_sink_input_push_volume;
@ -141,15 +126,6 @@ gvc_mixer_sink_input_init (GvcMixerSinkInput *sink_input)
sink_input->priv = GVC_MIXER_SINK_INPUT_GET_PRIVATE (sink_input); sink_input->priv = GVC_MIXER_SINK_INPUT_GET_PRIVATE (sink_input);
} }
static void
gvc_mixer_sink_input_dispose (GObject *object)
{
g_return_if_fail (object != NULL);
g_return_if_fail (GVC_IS_MIXER_SINK_INPUT (object));
G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->dispose (object);
}
static void static void
gvc_mixer_sink_input_finalize (GObject *object) gvc_mixer_sink_input_finalize (GObject *object)
{ {

View File

@ -43,7 +43,6 @@ struct GvcMixerSinkPrivate
static void gvc_mixer_sink_class_init (GvcMixerSinkClass *klass); static void gvc_mixer_sink_class_init (GvcMixerSinkClass *klass);
static void gvc_mixer_sink_init (GvcMixerSink *mixer_sink); static void gvc_mixer_sink_init (GvcMixerSink *mixer_sink);
static void gvc_mixer_sink_finalize (GObject *object); static void gvc_mixer_sink_finalize (GObject *object);
static void gvc_mixer_sink_dispose (GObject *object);
G_DEFINE_TYPE (GvcMixerSink, gvc_mixer_sink, GVC_TYPE_MIXER_STREAM) G_DEFINE_TYPE (GvcMixerSink, gvc_mixer_sink, GVC_TYPE_MIXER_STREAM)
@ -139,26 +138,12 @@ gvc_mixer_sink_change_port (GvcMixerStream *stream,
#endif /* PA_MICRO > 15 */ #endif /* PA_MICRO > 15 */
} }
static GObject *
gvc_mixer_sink_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_params)
{
GObject *object;
object = G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->constructor (type, n_construct_properties, construct_params);
return object;
}
static void static void
gvc_mixer_sink_class_init (GvcMixerSinkClass *klass) gvc_mixer_sink_class_init (GvcMixerSinkClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass); GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
object_class->constructor = gvc_mixer_sink_constructor;
object_class->dispose = gvc_mixer_sink_dispose;
object_class->finalize = gvc_mixer_sink_finalize; object_class->finalize = gvc_mixer_sink_finalize;
stream_class->push_volume = gvc_mixer_sink_push_volume; stream_class->push_volume = gvc_mixer_sink_push_volume;
@ -174,15 +159,6 @@ gvc_mixer_sink_init (GvcMixerSink *sink)
sink->priv = GVC_MIXER_SINK_GET_PRIVATE (sink); sink->priv = GVC_MIXER_SINK_GET_PRIVATE (sink);
} }
static void
gvc_mixer_sink_dispose (GObject *object)
{
g_return_if_fail (object != NULL);
g_return_if_fail (GVC_IS_MIXER_SINK (object));
G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->dispose (object);
}
static void static void
gvc_mixer_sink_finalize (GObject *object) gvc_mixer_sink_finalize (GObject *object)
{ {

View File

@ -60,25 +60,12 @@ gvc_mixer_source_output_change_is_muted (GvcMixerStream *stream,
return TRUE; return TRUE;
} }
static GObject *
gvc_mixer_source_output_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_params)
{
GObject *object;
object = G_OBJECT_CLASS (gvc_mixer_source_output_parent_class)->constructor (type, n_construct_properties, construct_params);
return object;
}
static void static void
gvc_mixer_source_output_class_init (GvcMixerSourceOutputClass *klass) gvc_mixer_source_output_class_init (GvcMixerSourceOutputClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass); GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
object_class->constructor = gvc_mixer_source_output_constructor;
object_class->finalize = gvc_mixer_source_output_finalize; object_class->finalize = gvc_mixer_source_output_finalize;
stream_class->push_volume = gvc_mixer_source_output_push_volume; stream_class->push_volume = gvc_mixer_source_output_push_volume;

View File

@ -43,7 +43,6 @@ struct GvcMixerSourcePrivate
static void gvc_mixer_source_class_init (GvcMixerSourceClass *klass); static void gvc_mixer_source_class_init (GvcMixerSourceClass *klass);
static void gvc_mixer_source_init (GvcMixerSource *mixer_source); static void gvc_mixer_source_init (GvcMixerSource *mixer_source);
static void gvc_mixer_source_finalize (GObject *object); static void gvc_mixer_source_finalize (GObject *object);
static void gvc_mixer_source_dispose (GObject *object);
G_DEFINE_TYPE (GvcMixerSource, gvc_mixer_source, GVC_TYPE_MIXER_STREAM) G_DEFINE_TYPE (GvcMixerSource, gvc_mixer_source, GVC_TYPE_MIXER_STREAM)
@ -139,26 +138,12 @@ gvc_mixer_source_change_port (GvcMixerStream *stream,
#endif /* PA_MICRO > 15 */ #endif /* PA_MICRO > 15 */
} }
static GObject *
gvc_mixer_source_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_params)
{
GObject *object;
object = G_OBJECT_CLASS (gvc_mixer_source_parent_class)->constructor (type, n_construct_properties, construct_params);
return object;
}
static void static void
gvc_mixer_source_class_init (GvcMixerSourceClass *klass) gvc_mixer_source_class_init (GvcMixerSourceClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass); GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
object_class->constructor = gvc_mixer_source_constructor;
object_class->dispose = gvc_mixer_source_dispose;
object_class->finalize = gvc_mixer_source_finalize; object_class->finalize = gvc_mixer_source_finalize;
stream_class->push_volume = gvc_mixer_source_push_volume; stream_class->push_volume = gvc_mixer_source_push_volume;
@ -174,15 +159,6 @@ gvc_mixer_source_init (GvcMixerSource *source)
source->priv = GVC_MIXER_SOURCE_GET_PRIVATE (source); source->priv = GVC_MIXER_SOURCE_GET_PRIVATE (source);
} }
static void
gvc_mixer_source_dispose (GObject *object)
{
g_return_if_fail (object != NULL);
g_return_if_fail (GVC_IS_MIXER_SOURCE (object));
G_OBJECT_CLASS (gvc_mixer_source_parent_class)->dispose (object);
}
static void static void
gvc_mixer_source_finalize (GObject *object) gvc_mixer_source_finalize (GObject *object)
{ {

View File

@ -390,6 +390,15 @@ gvc_mixer_stream_get_icon_name (GvcMixerStream *stream)
return stream->priv->icon_name; return stream->priv->icon_name;
} }
GIcon *
gvc_mixer_stream_get_gicon (GvcMixerStream *stream)
{
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
if (stream->priv->icon_name == NULL)
return NULL;
return g_themed_icon_new_with_default_fallbacks (stream->priv->icon_name);
}
gboolean gboolean
gvc_mixer_stream_set_icon_name (GvcMixerStream *stream, gvc_mixer_stream_set_icon_name (GvcMixerStream *stream,
const char *icon_name) const char *icon_name)
@ -496,7 +505,7 @@ gvc_mixer_stream_change_port (GvcMixerStream *stream,
const GList * const GList *
gvc_mixer_stream_get_ports (GvcMixerStream *stream) gvc_mixer_stream_get_ports (GvcMixerStream *stream)
{ {
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE); g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
return stream->priv->ports; return stream->priv->ports;
} }

View File

@ -24,6 +24,7 @@
#include <glib-object.h> #include <glib-object.h>
#include "gvc-pulseaudio-fake.h" #include "gvc-pulseaudio-fake.h"
#include "gvc-channel-map.h" #include "gvc-channel-map.h"
#include <gio/gio.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@ -84,6 +85,7 @@ gboolean gvc_mixer_stream_change_is_muted (GvcMixerStream *stream,
gboolean gvc_mixer_stream_is_running (GvcMixerStream *stream); gboolean gvc_mixer_stream_is_running (GvcMixerStream *stream);
const char * gvc_mixer_stream_get_name (GvcMixerStream *stream); const char * gvc_mixer_stream_get_name (GvcMixerStream *stream);
const char * gvc_mixer_stream_get_icon_name (GvcMixerStream *stream); const char * gvc_mixer_stream_get_icon_name (GvcMixerStream *stream);
GIcon * gvc_mixer_stream_get_gicon (GvcMixerStream *stream);
const char * gvc_mixer_stream_get_description (GvcMixerStream *stream); const char * gvc_mixer_stream_get_description (GvcMixerStream *stream);
const char * gvc_mixer_stream_get_application_id (GvcMixerStream *stream); const char * gvc_mixer_stream_get_application_id (GvcMixerStream *stream);
gboolean gvc_mixer_stream_is_event_stream (GvcMixerStream *stream); gboolean gvc_mixer_stream_is_event_stream (GvcMixerStream *stream);