[gnome-media] Handle the last input source being removed



commit 2bbb3e22b81f7cb46488f7705bdbc1932c0cc07c
Author: Bastien Nocera <hadess hadess net>
Date:   Tue Feb 2 12:25:16 2010 +0000

    Handle the last input source being removed
    
    When removing the last input source, emit "default-source-changed"
    with an invalid stream ID, so that the front-end knows to remove
    the widgets associated with the disappeared input.
    
    (Same applies to sinks/outputs, though PulseAudio will create a
     dummy output, hiding  that fact)
    
    https://bugzilla.gnome.org/show_bug.cgi?id=598921

 gnome-volume-control/src/gvc-applet.c        |    2 +-
 gnome-volume-control/src/gvc-mixer-control.c |    9 ++++++++-
 gnome-volume-control/src/gvc-mixer-dialog.c  |   21 ++++++++++++++++-----
 3 files changed, 25 insertions(+), 7 deletions(-)
---
diff --git a/gnome-volume-control/src/gvc-applet.c b/gnome-volume-control/src/gvc-applet.c
index ae89e71..8de0f43 100644
--- a/gnome-volume-control/src/gvc-applet.c
+++ b/gnome-volume-control/src/gvc-applet.c
@@ -141,7 +141,7 @@ update_default_source (GvcApplet *applet)
                                                          stream);
                 maybe_show_status_icons(applet);
         } else {
-                g_warning ("Unable to get default source");
+                g_debug ("Unable to get default source, or no source available");
         }
 }
 
diff --git a/gnome-volume-control/src/gvc-mixer-control.c b/gnome-volume-control/src/gvc-mixer-control.c
index 72e607f..c1f6550 100644
--- a/gnome-volume-control/src/gvc-mixer-control.c
+++ b/gnome-volume-control/src/gvc-mixer-control.c
@@ -448,6 +448,10 @@ _set_default_source (GvcMixerControl *control,
         if (stream == NULL) {
                 control->priv->default_source_id = 0;
                 control->priv->default_source_is_set = FALSE;
+                g_signal_emit (control,
+                               signals[DEFAULT_SOURCE_CHANGED],
+                               0,
+                               PA_INVALID_INDEX);
                 return;
         }
 
@@ -472,6 +476,10 @@ _set_default_sink (GvcMixerControl *control,
         if (stream == NULL) {
                 control->priv->default_sink_id = 0;
                 control->priv->default_sink_is_set = FALSE;
+                g_signal_emit (control,
+                               signals[DEFAULT_SINK_CHANGED],
+                               0,
+                               PA_INVALID_INDEX);
                 return;
         }
 
@@ -480,7 +488,6 @@ _set_default_sink (GvcMixerControl *control,
         if (control->priv->default_sink_id != new_id) {
                 control->priv->default_sink_id = new_id;
                 control->priv->default_sink_is_set = TRUE;
-
                 g_signal_emit (control,
                                signals[DEFAULT_SINK_CHANGED],
                                0,
diff --git a/gnome-volume-control/src/gvc-mixer-dialog.c b/gnome-volume-control/src/gvc-mixer-dialog.c
index afc1705..f415d32 100644
--- a/gnome-volume-control/src/gvc-mixer-dialog.c
+++ b/gnome-volume-control/src/gvc-mixer-dialog.c
@@ -129,9 +129,14 @@ update_default_input (GvcMixerDialog *dialog)
 {
         GtkTreeModel *model;
         GtkTreeIter   iter;
+        gboolean      ret;
 
         model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->input_treeview));
-        gtk_tree_model_get_iter_first (model, &iter);
+        ret = gtk_tree_model_get_iter_first (model, &iter);
+        if (ret == FALSE) {
+                g_debug ("No default input selected or available");
+                return;
+        }
         do {
                 gboolean        toggled;
                 gboolean        is_default;
@@ -369,8 +374,11 @@ on_mixer_control_default_sink_changed (GvcMixerControl *control,
 
         g_debug ("GvcMixerDialog: default sink changed: %u", id);
 
-        stream = gvc_mixer_control_lookup_stream_id (dialog->priv->mixer_control,
-                                                     id);
+        if (id == PA_INVALID_INDEX)
+                stream = NULL;
+        else
+                stream = gvc_mixer_control_lookup_stream_id (dialog->priv->mixer_control,
+                                                             id);
         bar_set_stream (dialog, dialog->priv->output_bar, stream);
 
         update_output_settings (dialog);
@@ -547,7 +555,7 @@ update_input_settings (GvcMixerDialog *dialog)
 
         stream = gvc_mixer_control_get_default_source (dialog->priv->mixer_control);
         if (stream == NULL) {
-                g_warning ("Default source stream not found");
+                g_debug ("Default source stream not found");
                 return;
         }
 
@@ -589,7 +597,10 @@ on_mixer_control_default_source_changed (GvcMixerControl *control,
 
         g_debug ("GvcMixerDialog: default source changed: %u", id);
 
-        stream = gvc_mixer_control_lookup_stream_id (dialog->priv->mixer_control, id);
+        if (id == PA_INVALID_INDEX)
+                stream = NULL;
+        else
+                stream = gvc_mixer_control_lookup_stream_id (dialog->priv->mixer_control, id);
 
         /* Disconnect the adj, otherwise it might change if is_amplified changes */
         adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (dialog->priv->input_bar)));



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]