[Spice-devel] [PATCH spice-gtk 1/4] Add spice_audio_get()
Hans de Goede
hdegoede at redhat.com
Mon Nov 7 00:12:28 PST 2011
All 4 patches look good, ACK series.
Regards,
Hans
On 11/05/2011 05:56 PM, Marc-André Lureau wrote:
> We are going to deprecate spice_audio_new()
> some day. There are a few know problems:
> - SpiceAudio is an abstract class,
> so it can't have a ctor
> - SpiceAudio should be a singleton,
> associated with the session lifetime
> - SpiceSession should have a enable-audio property,
> internal code should be able to access the audio object
>
> That way of getting the audio object is similar to the smartcard manager and usb manager.
> ---
> gtk/map-file | 1 +
> gtk/spice-audio.c | 33 +++++++++++++++++++++++++++++++++
> gtk/spice-audio.h | 6 +++---
> 3 files changed, 37 insertions(+), 3 deletions(-)
>
> diff --git a/gtk/map-file b/gtk/map-file
> index 0b1b26f..f9bc46c 100644
> --- a/gtk/map-file
> +++ b/gtk/map-file
> @@ -2,6 +2,7 @@ SPICEGTK_1 {
> global:
> spice_audio_get_type;
> spice_audio_new;
> +spice_audio_get;
> spice_channel_connect;
> spice_channel_destroy;
> spice_channel_disconnect;
> diff --git a/gtk/spice-audio.c b/gtk/spice-audio.c
> index baa7c0b..e991cea 100644
> --- a/gtk/spice-audio.c
> +++ b/gtk/spice-audio.c
> @@ -89,3 +89,36 @@ SpiceAudio *spice_audio_new(SpiceSession *session, GMainContext *context,
> #endif
> return audio;
> }
> +
> +/**
> + * spice_audio_get:
> + * @session: the #SpiceSession to connect to
> + * @context: (allow-none): a #GMainContext to attach to (or %NULL for default).
> + *
> + * Gets the #SpiceAudio associated with the passed in #SpiceSession.
> + * A new #SpiceAudio instance will be created the first time this
> + * function is called for a certain #SpiceSession.
> + *
> + * Note that this function returns a weak reference, which should not be used
> + * after the #SpiceSession itself has been unref-ed by the caller.
> + *
> + * Returns: (transfer none): a weak reference to a #SpiceAudio
> + * instance or %NULL if failed.
> + **/
> +SpiceAudio *spice_audio_get(SpiceSession *session, GMainContext *context)
> +{
> + static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
> + SpiceAudio *self;
> +
> + g_static_mutex_lock(&mutex);
> + self = g_object_get_data(G_OBJECT(session), "spice-audio");
> + if (self == NULL) {
> + self = spice_audio_new(session, context, NULL);
> + g_object_set_data(G_OBJECT(session), "spice-audio", self);
> + if (self)
> + g_object_weak_ref(G_OBJECT(session), (GWeakNotify)g_object_unref, self);
> + }
> + g_static_mutex_unlock(&mutex);
> +
> + return self;
> +}
> diff --git a/gtk/spice-audio.h b/gtk/spice-audio.h
> index b881698..dc66e88 100644
> --- a/gtk/spice-audio.h
> +++ b/gtk/spice-audio.h
> @@ -69,9 +69,9 @@ struct _SpiceAudioClass {
>
> GType spice_audio_get_type(void);
>
> -SpiceAudio *spice_audio_new(SpiceSession *session,
> - GMainContext *context,
> - const char *name);
> +SpiceAudio* spice_audio_new(SpiceSession *session, GMainContext *context, const char *name);
> +
> +SpiceAudio* spice_audio_get(SpiceSession *session, GMainContext *context);
>
> G_END_DECLS
>
More information about the Spice-devel
mailing list