[gnome-media] Merge the is_running logic



commit a6038b152036cb3e1eca21a6b4bd749a15019fc9
Author: Bastien Nocera <hadess hadess net>
Date:   Fri May 15 17:24:41 2009 +0100

    Merge the is_running logic
    
    It was the same in all the GvcMixerStream classes with real backing
    streams, so merge all that logic into gvc-mixer-stream.c
---
 gnome-volume-control/src/gvc-mixer-event-role.c    |   12 ++++---
 gnome-volume-control/src/gvc-mixer-sink-input.c    |   33 ++------------------
 gnome-volume-control/src/gvc-mixer-sink.c          |   33 ++------------------
 gnome-volume-control/src/gvc-mixer-source-output.c |    3 +-
 gnome-volume-control/src/gvc-mixer-source.c        |   33 ++------------------
 gnome-volume-control/src/gvc-mixer-stream.c        |   27 ++++++++++++++--
 gnome-volume-control/src/gvc-mixer-stream.h        |    3 +-
 7 files changed, 42 insertions(+), 102 deletions(-)

diff --git a/gnome-volume-control/src/gvc-mixer-event-role.c b/gnome-volume-control/src/gvc-mixer-event-role.c
index 1dcd5ff..69e38ce 100644
--- a/gnome-volume-control/src/gvc-mixer-event-role.c
+++ b/gnome-volume-control/src/gvc-mixer-event-role.c
@@ -53,7 +53,8 @@ G_DEFINE_TYPE (GvcMixerEventRole, gvc_mixer_event_role, GVC_TYPE_MIXER_STREAM)
 
 static gboolean
 update_settings (GvcMixerEventRole *role,
-                 gboolean           is_muted)
+                 gboolean           is_muted,
+                 gpointer          *op)
 {
         pa_operation              *o;
         guint                      index;
@@ -86,16 +87,17 @@ update_settings (GvcMixerEventRole *role,
                 return FALSE;
         }
 
-        pa_operation_unref(o);
+	if (op != NULL)
+		*op = o;
 
         return TRUE;
 }
 
 static gboolean
-gvc_mixer_event_role_push_volume (GvcMixerStream *stream)
+gvc_mixer_event_role_push_volume (GvcMixerStream *stream, gpointer *op)
 {
         return update_settings (GVC_MIXER_EVENT_ROLE (stream),
-                                gvc_mixer_stream_get_is_muted (stream));
+                                gvc_mixer_stream_get_is_muted (stream), op);
 }
 
 static gboolean
@@ -103,7 +105,7 @@ gvc_mixer_event_role_change_is_muted (GvcMixerStream *stream,
                                       gboolean        is_muted)
 {
         return update_settings (GVC_MIXER_EVENT_ROLE (stream),
-                                is_muted);
+                                is_muted, NULL);
 }
 
 static gboolean
diff --git a/gnome-volume-control/src/gvc-mixer-sink-input.c b/gnome-volume-control/src/gvc-mixer-sink-input.c
index 83ea651..35551bb 100644
--- a/gnome-volume-control/src/gvc-mixer-sink-input.c
+++ b/gnome-volume-control/src/gvc-mixer-sink-input.c
@@ -35,7 +35,7 @@
 
 struct GvcMixerSinkInputPrivate
 {
-        pa_operation *change_volume_op;
+        gpointer dummy;
 };
 
 static void     gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass);
@@ -46,7 +46,7 @@ static void     gvc_mixer_sink_input_dispose    (GObject                *object)
 G_DEFINE_TYPE (GvcMixerSinkInput, gvc_mixer_sink_input, GVC_TYPE_MIXER_STREAM)
 
 static gboolean
-gvc_mixer_sink_input_push_volume (GvcMixerStream *stream)
+gvc_mixer_sink_input_push_volume (GvcMixerStream *stream, gpointer *op)
 {
         pa_operation      *o;
         guint              index;
@@ -54,7 +54,6 @@ gvc_mixer_sink_input_push_volume (GvcMixerStream *stream)
         pa_context        *context;
         const pa_cvolume  *cv;
         guint              num_channels;
-        GvcMixerSinkInput *sink_input = GVC_MIXER_SINK_INPUT(stream);
 
         index = gvc_mixer_stream_get_index (stream);
 
@@ -76,10 +75,7 @@ gvc_mixer_sink_input_push_volume (GvcMixerStream *stream)
                 return FALSE;
         }
 
-        if (sink_input->priv->change_volume_op != NULL)
-                pa_operation_unref (sink_input->priv->change_volume_op);
-
-        sink_input->priv->change_volume_op = o;
+        *op = o;
 
         return TRUE;
 }
@@ -111,23 +107,6 @@ gvc_mixer_sink_input_change_is_muted (GvcMixerStream *stream,
         return TRUE;
 }
 
-static gboolean
-gvc_mixer_sink_input_is_running (GvcMixerStream *stream)
-{
-        GvcMixerSinkInput *sink_input = GVC_MIXER_SINK_INPUT (stream);
-
-        if (sink_input->priv->change_volume_op == NULL)
-                return FALSE;
-
-        if ((pa_operation_get_state(sink_input->priv->change_volume_op) == PA_OPERATION_RUNNING))
-                return TRUE;
-
-        pa_operation_unref(sink_input->priv->change_volume_op);
-        sink_input->priv->change_volume_op = NULL;
-
-        return FALSE;
-}
-
 static GObject *
 gvc_mixer_sink_input_constructor (GType                  type,
                                   guint                  n_construct_properties,
@@ -155,7 +134,6 @@ gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass)
 
         stream_class->push_volume = gvc_mixer_sink_input_push_volume;
         stream_class->change_is_muted = gvc_mixer_sink_input_change_is_muted;
-        stream_class->is_running = gvc_mixer_sink_input_is_running;
 
         g_type_class_add_private (klass, sizeof (GvcMixerSinkInputPrivate));
 }
@@ -176,11 +154,6 @@ gvc_mixer_sink_input_dispose (GObject *object)
 
         mixer_sink_input = GVC_MIXER_SINK_INPUT (object);
 
-        if (mixer_sink_input->priv->change_volume_op) {
-                pa_operation_unref(mixer_sink_input->priv->change_volume_op);
-                mixer_sink_input->priv->change_volume_op = NULL;
-        }
-
         G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->dispose (object);
 }
 
diff --git a/gnome-volume-control/src/gvc-mixer-sink.c b/gnome-volume-control/src/gvc-mixer-sink.c
index 218f9cd..06e5af6 100644
--- a/gnome-volume-control/src/gvc-mixer-sink.c
+++ b/gnome-volume-control/src/gvc-mixer-sink.c
@@ -35,7 +35,7 @@
 
 struct GvcMixerSinkPrivate
 {
-        pa_operation *change_volume_op;
+        gpointer dummy;
 };
 
 static void     gvc_mixer_sink_class_init (GvcMixerSinkClass *klass);
@@ -46,14 +46,13 @@ static void     gvc_mixer_sink_dispose    (GObject           *object);
 G_DEFINE_TYPE (GvcMixerSink, gvc_mixer_sink, GVC_TYPE_MIXER_STREAM)
 
 static gboolean
-gvc_mixer_sink_push_volume (GvcMixerStream *stream)
+gvc_mixer_sink_push_volume (GvcMixerStream *stream, gpointer *op)
 {
         pa_operation      *o;
         guint              index;
         GvcChannelMap     *map;
         pa_context        *context;
         const pa_cvolume  *cv;
-        GvcMixerSink      *sink = GVC_MIXER_SINK (stream);
 
         index = gvc_mixer_stream_get_index (stream);
 
@@ -75,10 +74,7 @@ gvc_mixer_sink_push_volume (GvcMixerStream *stream)
                 return FALSE;
         }
 
-        if (sink->priv->change_volume_op != NULL)
-                pa_operation_unref (sink->priv->change_volume_op);
-
-        sink->priv->change_volume_op = o;
+        *op = o;
 
         return TRUE;
 }
@@ -110,23 +106,6 @@ gvc_mixer_sink_change_is_muted (GvcMixerStream *stream,
         return TRUE;
 }
 
-static gboolean
-gvc_mixer_sink_is_running (GvcMixerStream *stream)
-{
-        GvcMixerSink *sink = GVC_MIXER_SINK (stream);
-
-        if (sink->priv->change_volume_op == NULL)
-                return FALSE;
-
-        if ((pa_operation_get_state(sink->priv->change_volume_op) == PA_OPERATION_RUNNING))
-                return TRUE;
-
-        pa_operation_unref(sink->priv->change_volume_op);
-        sink->priv->change_volume_op = NULL;
-
-        return FALSE;
-}
-
 static GObject *
 gvc_mixer_sink_constructor (GType                  type,
                             guint                  n_construct_properties,
@@ -154,7 +133,6 @@ gvc_mixer_sink_class_init (GvcMixerSinkClass *klass)
 
         stream_class->push_volume = gvc_mixer_sink_push_volume;
         stream_class->change_is_muted = gvc_mixer_sink_change_is_muted;
-        stream_class->is_running = gvc_mixer_sink_is_running;
 
         g_type_class_add_private (klass, sizeof (GvcMixerSinkPrivate));
 }
@@ -175,11 +153,6 @@ gvc_mixer_sink_dispose (GObject *object)
 
         mixer_sink = GVC_MIXER_SINK (object);
 
-        if (mixer_sink->priv->change_volume_op) {
-                pa_operation_unref(mixer_sink->priv->change_volume_op);
-                mixer_sink->priv->change_volume_op = NULL;
-        }
-
         G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->dispose (object);
 }
 
diff --git a/gnome-volume-control/src/gvc-mixer-source-output.c b/gnome-volume-control/src/gvc-mixer-source-output.c
index a9cf120..b4cc34d 100644
--- a/gnome-volume-control/src/gvc-mixer-source-output.c
+++ b/gnome-volume-control/src/gvc-mixer-source-output.c
@@ -45,9 +45,10 @@ static void     gvc_mixer_source_output_finalize   (GObject            *object);
 G_DEFINE_TYPE (GvcMixerSourceOutput, gvc_mixer_source_output, GVC_TYPE_MIXER_STREAM)
 
 static gboolean
-gvc_mixer_source_output_push_volume (GvcMixerStream *stream)
+gvc_mixer_source_output_push_volume (GvcMixerStream *stream, gpointer *op)
 {
         /* FIXME: */
+        *op = NULL;
         return TRUE;
 }
 
diff --git a/gnome-volume-control/src/gvc-mixer-source.c b/gnome-volume-control/src/gvc-mixer-source.c
index 33b0ada..ae02d85 100644
--- a/gnome-volume-control/src/gvc-mixer-source.c
+++ b/gnome-volume-control/src/gvc-mixer-source.c
@@ -35,7 +35,7 @@
 
 struct GvcMixerSourcePrivate
 {
-        pa_operation *change_volume_op;
+        gpointer dummy;
 };
 
 static void     gvc_mixer_source_class_init (GvcMixerSourceClass *klass);
@@ -46,14 +46,13 @@ static void     gvc_mixer_source_dispose    (GObject           *object);
 G_DEFINE_TYPE (GvcMixerSource, gvc_mixer_source, GVC_TYPE_MIXER_STREAM)
 
 static gboolean
-gvc_mixer_source_push_volume (GvcMixerStream *stream)
+gvc_mixer_source_push_volume (GvcMixerStream *stream, gpointer *op)
 {
         pa_operation      *o;
         guint              index;
         GvcChannelMap     *map;
         pa_context        *context;
         const pa_cvolume  *cv;
-        GvcMixerSource    *source = GVC_MIXER_SOURCE (stream);
 
         index = gvc_mixer_stream_get_index (stream);
 
@@ -75,10 +74,7 @@ gvc_mixer_source_push_volume (GvcMixerStream *stream)
                 return FALSE;
         }
 
-        if (source->priv->change_volume_op != NULL)
-                pa_operation_unref (source->priv->change_volume_op);
-
-        source->priv->change_volume_op = o;
+        *op = o;
 
         return TRUE;
 }
@@ -110,23 +106,6 @@ gvc_mixer_source_change_is_muted (GvcMixerStream *stream,
         return TRUE;
 }
 
-static gboolean
-gvc_mixer_source_is_running (GvcMixerStream *stream)
-{
-        GvcMixerSource *source = GVC_MIXER_SOURCE (stream);
-
-        if (source->priv->change_volume_op == NULL)
-                return FALSE;
-
-        if ((pa_operation_get_state(source->priv->change_volume_op) == PA_OPERATION_RUNNING))
-                return TRUE;
-
-        pa_operation_unref(source->priv->change_volume_op);
-        source->priv->change_volume_op = NULL;
-
-        return FALSE;
-}
-
 static GObject *
 gvc_mixer_source_constructor (GType                  type,
                             guint                  n_construct_properties,
@@ -154,7 +133,6 @@ gvc_mixer_source_class_init (GvcMixerSourceClass *klass)
 
         stream_class->push_volume = gvc_mixer_source_push_volume;
         stream_class->change_is_muted = gvc_mixer_source_change_is_muted;
-        stream_class->is_running = gvc_mixer_source_is_running;
 
         g_type_class_add_private (klass, sizeof (GvcMixerSourcePrivate));
 }
@@ -175,11 +153,6 @@ gvc_mixer_source_dispose (GObject *object)
 
         mixer_source = GVC_MIXER_SOURCE (object);
 
-        if (mixer_source->priv->change_volume_op) {
-                pa_operation_unref(mixer_source->priv->change_volume_op);
-                mixer_source->priv->change_volume_op = NULL;
-        }
-
         G_OBJECT_CLASS (gvc_mixer_source_parent_class)->dispose (object);
 }
 
diff --git a/gnome-volume-control/src/gvc-mixer-stream.c b/gnome-volume-control/src/gvc-mixer-stream.c
index 7efee99..e48a715 100644
--- a/gnome-volume-control/src/gvc-mixer-stream.c
+++ b/gnome-volume-control/src/gvc-mixer-stream.c
@@ -49,6 +49,7 @@ struct GvcMixerStreamPrivate
         gboolean       can_decibel;
         gboolean       is_event_stream;
         pa_volume_t    base_volume;
+        pa_operation  *change_volume_op;
 };
 
 enum
@@ -501,7 +502,7 @@ gvc_mixer_stream_constructor (GType                  type,
 }
 
 static gboolean
-gvc_mixer_stream_real_push_volume (GvcMixerStream *stream)
+gvc_mixer_stream_real_push_volume (GvcMixerStream *stream, gpointer *op)
 {
         return FALSE;
 }
@@ -516,9 +517,15 @@ gvc_mixer_stream_real_change_is_muted (GvcMixerStream *stream,
 gboolean
 gvc_mixer_stream_push_volume (GvcMixerStream *stream)
 {
+	pa_operation *op;
         gboolean ret;
         g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-        ret = GVC_MIXER_STREAM_GET_CLASS (stream)->push_volume (stream);
+        ret = GVC_MIXER_STREAM_GET_CLASS (stream)->push_volume (stream, (gpointer *) &op);
+        if (ret) {
+        	if (stream->priv->change_volume_op != NULL)
+        		pa_operation_unref (stream->priv->change_volume_op);
+        	stream->priv->change_volume_op = op;
+	}
         return ret;
 }
 
@@ -535,8 +542,15 @@ gvc_mixer_stream_change_is_muted (GvcMixerStream *stream,
 gboolean
 gvc_mixer_stream_is_running (GvcMixerStream *stream)
 {
-        if (GVC_MIXER_STREAM_GET_CLASS (stream)->is_running != NULL)
-                return GVC_MIXER_STREAM_GET_CLASS (stream)->is_running (stream);
+        if (stream->priv->change_volume_op == NULL)
+                return FALSE;
+
+        if ((pa_operation_get_state(stream->priv->change_volume_op) == PA_OPERATION_RUNNING))
+                return TRUE;
+
+        pa_operation_unref(stream->priv->change_volume_op);
+        stream->priv->change_volume_op = NULL;
+
         return FALSE;
 }
 
@@ -677,5 +691,10 @@ gvc_mixer_stream_finalize (GObject *object)
         g_free (mixer_stream->priv->icon_name);
         mixer_stream->priv->icon_name = NULL;
 
+       if (mixer_stream->priv->change_volume_op) {
+               pa_operation_unref(mixer_stream->priv->change_volume_op);
+               mixer_stream->priv->change_volume_op = NULL;
+       }
+
         G_OBJECT_CLASS (gvc_mixer_stream_parent_class)->finalize (object);
 }
diff --git a/gnome-volume-control/src/gvc-mixer-stream.h b/gnome-volume-control/src/gvc-mixer-stream.h
index fe33bb6..fb45c6f 100644
--- a/gnome-volume-control/src/gvc-mixer-stream.h
+++ b/gnome-volume-control/src/gvc-mixer-stream.h
@@ -48,10 +48,9 @@ typedef struct
         GObjectClass           parent_class;
 
         /* vtable */
-        gboolean (*push_volume)   (GvcMixerStream *stream);
+        gboolean (*push_volume)   (GvcMixerStream *stream, gpointer *operation);
         gboolean (*change_is_muted) (GvcMixerStream *stream,
                                      gboolean        is_muted);
-        gboolean (*is_running)      (GvcMixerStream *stream);
 } GvcMixerStreamClass;
 
 GType               gvc_mixer_stream_get_type        (void);



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