[Xfce4-commits] [panel-plugins/xfce4-pulseaudio-plugin] 05/21: Detect device (dis)connection

noreply at xfce.org noreply at xfce.org
Sat Sep 23 21:27:31 CEST 2017


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository panel-plugins/xfce4-pulseaudio-plugin.

commit 223259c89394c144eb3c78f226998c8d5c06271c
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Sep 10 19:35:33 2017 -0400

    Detect device (dis)connection
---
 panel-plugin/pulseaudio-volume.c | 38 ++++++++++++++++++++++++++++----------
 1 file changed, 28 insertions(+), 10 deletions(-)

diff --git a/panel-plugin/pulseaudio-volume.c b/panel-plugin/pulseaudio-volume.c
index 346eb34..7840afa 100644
--- a/panel-plugin/pulseaudio-volume.c
+++ b/panel-plugin/pulseaudio-volume.c
@@ -38,13 +38,21 @@
 #include "pulseaudio-volume.h"
 
 
-static void                 pulseaudio_volume_finalize           (GObject            *object);
-static void                 pulseaudio_volume_connect            (PulseaudioVolume   *volume);
-static gdouble              pulseaudio_volume_v2d                (PulseaudioVolume   *volume,
-                                                                  pa_volume_t         vol);
-static pa_volume_t          pulseaudio_volume_d2v                (PulseaudioVolume   *volume,
-                                                                  gdouble             vol);
-static gboolean             pulseaudio_volume_reconnect_timeout  (gpointer            userdata);
+static void                 pulseaudio_volume_finalize           (GObject              *object);
+static void                 pulseaudio_volume_connect            (PulseaudioVolume     *volume);
+static gdouble              pulseaudio_volume_v2d                (PulseaudioVolume     *volume,
+                                                                  pa_volume_t           vol);
+static pa_volume_t          pulseaudio_volume_d2v                (PulseaudioVolume     *volume,
+                                                                  gdouble               vol);
+static gboolean             pulseaudio_volume_reconnect_timeout  (gpointer              userdata);
+static void                 pulseaudio_volume_get_sink_list_cb   (pa_context           *context,
+                                                                  const pa_sink_info   *i,
+                                                                  int                   eol,
+                                                                  void                 *userdata);
+static void                 pulseaudio_volume_get_source_list_cb (pa_context           *context,
+                                                                  const pa_source_info *i,
+                                                                  int                   eol,
+                                                                  void                 *userdata);
 
 
 struct _PulseaudioVolume
@@ -269,6 +277,12 @@ pulseaudio_volume_sink_source_check (PulseaudioVolume *volume,
   g_return_if_fail (IS_PULSEAUDIO_VOLUME (volume));
 
   pa_context_get_server_info (context, pulseaudio_volume_server_info_cb, volume);
+
+  g_hash_table_remove_all (volume->sinks);
+  g_hash_table_remove_all (volume->sources);
+
+  pa_context_get_sink_info_list (volume->pa_context, pulseaudio_volume_get_sink_list_cb, volume);
+  pa_context_get_source_info_list (volume->pa_context, pulseaudio_volume_get_source_list_cb, volume);
 }
 
 
@@ -289,12 +303,18 @@ pulseaudio_volume_subscribe_cb (pa_context                   *context,
       pulseaudio_debug ("received sink event");
       break;
 
+    case PA_SUBSCRIPTION_EVENT_SINK_INPUT :
+      pulseaudio_volume_sink_source_check (volume, context);
+      pulseaudio_debug ("received sink output event");
+      break;
+
     case PA_SUBSCRIPTION_EVENT_SOURCE        :
       pulseaudio_volume_sink_source_check (volume, context);
       pulseaudio_debug ("received source event");
       break;
 
     case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT :
+      pulseaudio_volume_sink_source_check (volume, context);
       pulseaudio_debug ("received source output event");
       break;
 
@@ -387,7 +407,7 @@ pulseaudio_volume_context_state_cb (pa_context *context,
   switch (pa_context_get_state (context))
     {
     case PA_CONTEXT_READY        :
-      pa_context_subscribe (context, PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE | PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT | PA_SUBSCRIPTION_MASK_SERVER , NULL, NULL);
+      pa_context_subscribe (context, PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SINK_INPUT | PA_SUBSCRIPTION_MASK_SOURCE | PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT | PA_SUBSCRIPTION_MASK_SERVER , NULL, NULL);
       pa_context_set_subscribe_callback (context, pulseaudio_volume_subscribe_cb, volume);
 
       pulseaudio_debug ("PulseAudio connection established");
@@ -398,8 +418,6 @@ pulseaudio_volume_context_state_cb (pa_context *context,
       g_signal_emit (G_OBJECT (volume), pulseaudio_volume_signals [VOLUME_CHANGED], 0, FALSE);
       g_signal_emit (G_OBJECT (volume), pulseaudio_volume_signals [VOLUME_MIC_CHANGED], 0, FALSE);
 
-      pa_context_get_sink_info_list (volume->pa_context, pulseaudio_volume_get_sink_list_cb, volume);
-      pa_context_get_source_info_list (volume->pa_context, pulseaudio_volume_get_source_list_cb, volume);
       pa_context_get_server_info (volume->pa_context, pulseaudio_volume_get_server_info_cb, volume);
 
       break;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list