[gnome-media] Bug 574312 – Add mark for base volume instead of 100%



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]