[gnome-media] Bug 574312 – Add mark for base volume instead of 100%
- From: Bastien Nocera <hadess src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnome-media] Bug 574312 – Add mark for base volume instead of 100%
- Date: Thu, 14 May 2009 10:37:09 -0400 (EDT)
commit 4b0c56e4c7771c1560f3a1b0facf61680231cea8
Author: Bastien Nocera <hadess hadess net>
Date: Thu May 14 15:30:16 2009 +0100
Bug 574312 â?? Add mark for base volume instead of 100%
When the base volume is different from 100% volume, show that
in the source volume bar.
---
gnome-volume-control/src/gvc-channel-bar.c | 30 ++++++++++++++++++++++---
gnome-volume-control/src/gvc-channel-bar.h | 2 +
gnome-volume-control/src/gvc-mixer-control.c | 1 +
gnome-volume-control/src/gvc-mixer-dialog.c | 4 +++
gnome-volume-control/src/gvc-mixer-stream.c | 21 +++++++++++++++++-
gnome-volume-control/src/gvc-mixer-stream.h | 3 ++
6 files changed, 56 insertions(+), 5 deletions(-)
diff --git a/gnome-volume-control/src/gvc-channel-bar.c b/gnome-volume-control/src/gvc-channel-bar.c
index 6e29686..006ff2f 100644
--- a/gnome-volume-control/src/gvc-channel-bar.c
+++ b/gnome-volume-control/src/gvc-channel-bar.c
@@ -63,6 +63,7 @@ struct GvcChannelBarPrivate
gboolean symmetric;
gboolean click_lock;
gboolean is_amplified;
+ double base_volume;
};
enum
@@ -570,20 +571,27 @@ gvc_channel_bar_set_is_amplified (GvcChannelBar *bar, gboolean amplified)
bar->priv->is_amplified = amplified;
gtk_adjustment_set_upper (bar->priv->adjustment, ADJUSTMENT_MAX);
gtk_adjustment_set_upper (bar->priv->zero_adjustment, ADJUSTMENT_MAX);
+ gtk_scale_clear_marks (GTK_SCALE (bar->priv->scale));
if (amplified) {
char *str;
- str = g_strdup_printf ("<small>%s</small>", C_("volume", "100%"));
- gtk_scale_add_mark (GTK_SCALE (bar->priv->scale), ADJUSTMENT_MAX_NORMAL,
- GTK_POS_BOTTOM, str);
+ if (bar->priv->base_volume == ADJUSTMENT_MAX_NORMAL) {
+ str = g_strdup_printf ("<small>%s</small>", C_("volume", "100%"));
+ gtk_scale_add_mark (GTK_SCALE (bar->priv->scale), ADJUSTMENT_MAX_NORMAL,
+ GTK_POS_BOTTOM, str);
+ } else {
+ str = g_strdup_printf ("<small>%s</small>", C_("volume", "Unamplified"));
+ gtk_scale_add_mark (GTK_SCALE (bar->priv->scale), bar->priv->base_volume,
+ GTK_POS_BOTTOM, str);
+ }
+
g_free (str);
gtk_alignment_set (GTK_ALIGNMENT (bar->priv->mute_box), 0.5, 0, 0, 0);
gtk_misc_set_alignment (GTK_MISC (bar->priv->low_image), 0.5, 0);
gtk_misc_set_alignment (GTK_MISC (bar->priv->high_image), 0.5, 0);
gtk_misc_set_alignment (GTK_MISC (bar->priv->label), 0, 0);
} else {
- gtk_scale_clear_marks (GTK_SCALE (bar->priv->scale));
gtk_alignment_set (GTK_ALIGNMENT (bar->priv->mute_box), 0.5, 0.5, 0, 0);
gtk_misc_set_alignment (GTK_MISC (bar->priv->low_image), 0.5, 0.5);
gtk_misc_set_alignment (GTK_MISC (bar->priv->high_image), 0.5, 0.5);
@@ -591,6 +599,19 @@ gvc_channel_bar_set_is_amplified (GvcChannelBar *bar, gboolean amplified)
}
}
+void
+gvc_channel_bar_set_base_volume (GvcChannelBar *bar,
+ double base_volume)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ if (base_volume == 0)
+ bar->priv->base_volume = ADJUSTMENT_MAX_NORMAL;
+
+ /* Note that you need to call _is_amplified() afterwards to update the marks */
+ bar->priv->base_volume = base_volume;
+}
+
static void
gvc_channel_bar_set_property (GObject *object,
guint prop_id,
@@ -788,6 +809,7 @@ gvc_channel_bar_init (GvcChannelBar *bar)
bar->priv = GVC_CHANNEL_BAR_GET_PRIVATE (bar);
+ bar->priv->base_volume = ADJUSTMENT_MAX_NORMAL;
bar->priv->low_icon_name = g_strdup ("audio-volume-low");
bar->priv->high_icon_name = g_strdup ("audio-volume-high");
diff --git a/gnome-volume-control/src/gvc-channel-bar.h b/gnome-volume-control/src/gvc-channel-bar.h
index d84276e..defb44a 100644
--- a/gnome-volume-control/src/gvc-channel-bar.h
+++ b/gnome-volume-control/src/gvc-channel-bar.h
@@ -75,6 +75,8 @@ void gvc_channel_bar_set_size_group (GvcChannelBar *bar,
gboolean symmetric);
void gvc_channel_bar_set_is_amplified (GvcChannelBar *bar,
gboolean amplified);
+void gvc_channel_bar_set_base_volume (GvcChannelBar *bar,
+ double base_volume);
gboolean gvc_channel_bar_scroll (GvcChannelBar *bar,
GdkScrollDirection direction);
diff --git a/gnome-volume-control/src/gvc-mixer-control.c b/gnome-volume-control/src/gvc-mixer-control.c
index fd69fe8..166bdc3 100644
--- a/gnome-volume-control/src/gvc-mixer-control.c
+++ b/gnome-volume-control/src/gvc-mixer-control.c
@@ -604,6 +604,7 @@ update_source (GvcMixerControl *control,
gvc_mixer_stream_set_volume (stream, (guint)max_volume);
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_base_volume (stream, (guint32) info->base_volume);
if (!!(info->flags & PA_SINK_DECIBEL_VOLUME)) {
gdouble db;
db = pa_sw_volume_to_dB (max_volume);
diff --git a/gnome-volume-control/src/gvc-mixer-dialog.c b/gnome-volume-control/src/gvc-mixer-dialog.c
index 7fa0120..d30bb28 100644
--- a/gnome-volume-control/src/gvc-mixer-dialog.c
+++ b/gnome-volume-control/src/gvc-mixer-dialog.c
@@ -414,6 +414,8 @@ on_mixer_control_default_source_changed (GvcMixerControl *control,
adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (dialog->priv->input_bar)));
g_signal_handlers_disconnect_by_func(adj, on_adjustment_value_changed, dialog);
bar_set_stream (dialog, dialog->priv->input_bar, stream);
+ gvc_channel_bar_set_base_volume (GVC_CHANNEL_BAR (dialog->priv->input_bar),
+ gvc_mixer_stream_get_base_volume (stream));
gvc_channel_bar_set_is_amplified (GVC_CHANNEL_BAR (dialog->priv->input_bar),
gvc_mixer_stream_get_can_decibel (stream));
g_signal_connect (adj,
@@ -704,6 +706,8 @@ add_stream (GvcMixerDialog *dialog,
adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (bar)));
g_signal_handlers_disconnect_by_func(adj, on_adjustment_value_changed, dialog);
+ gvc_channel_bar_set_base_volume (GVC_CHANNEL_BAR (dialog->priv->input_bar),
+ gvc_mixer_stream_get_base_volume (stream));
gvc_channel_bar_set_is_amplified (GVC_CHANNEL_BAR (bar),
gvc_mixer_stream_get_can_decibel (stream));
diff --git a/gnome-volume-control/src/gvc-mixer-stream.c b/gnome-volume-control/src/gvc-mixer-stream.c
index 4978c60..60464e7 100644
--- a/gnome-volume-control/src/gvc-mixer-stream.c
+++ b/gnome-volume-control/src/gvc-mixer-stream.c
@@ -50,6 +50,7 @@ struct GvcMixerStreamPrivate
gboolean is_muted;
gboolean can_decibel;
gboolean is_event_stream;
+ guint32 base_volume;
};
enum
@@ -341,6 +342,25 @@ gvc_mixer_stream_set_icon_name (GvcMixerStream *stream,
return TRUE;
}
+guint32
+gvc_mixer_stream_get_base_volume (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
+
+ return stream->priv->base_volume;
+}
+
+gboolean
+gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,
+ guint32 base_volume)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ stream->priv->base_volume = base_volume;
+
+ return TRUE;
+}
+
static void
gvc_mixer_stream_set_property (GObject *object,
guint prop_id,
@@ -619,7 +639,6 @@ static void
gvc_mixer_stream_init (GvcMixerStream *stream)
{
stream->priv = GVC_MIXER_STREAM_GET_PRIVATE (stream);
-
}
static void
diff --git a/gnome-volume-control/src/gvc-mixer-stream.h b/gnome-volume-control/src/gvc-mixer-stream.h
index 50cc8db..1c28cd0 100644
--- a/gnome-volume-control/src/gvc-mixer-stream.h
+++ b/gnome-volume-control/src/gvc-mixer-stream.h
@@ -66,6 +66,7 @@ guint gvc_mixer_stream_get_volume (GvcMixerStream *stream);
gdouble gvc_mixer_stream_get_decibel (GvcMixerStream *stream);
gboolean gvc_mixer_stream_change_volume (GvcMixerStream *stream,
guint volume);
+guint32 gvc_mixer_stream_get_base_volume (GvcMixerStream *stream);
gboolean gvc_mixer_stream_get_is_muted (GvcMixerStream *stream);
gboolean gvc_mixer_stream_get_can_decibel (GvcMixerStream *stream);
@@ -97,6 +98,8 @@ gboolean gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream
gboolean is_event_stream);
gboolean gvc_mixer_stream_set_application_id (GvcMixerStream *stream,
const char *application_id);
+gboolean gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,
+ guint32 base_volume);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]