summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiovanni Campagna <gcampagna@src.gnome.org>2012-10-18 19:45:56 +0200
committerGiovanni Campagna <gcampagna@src.gnome.org>2012-12-08 15:45:28 +0100
commit740bab171443cda76d27ca77ac31717475ad51dd (patch)
tree91a2fbe9b71d6939b04149d963cbaae38eab6ef6
parenteab2bf3eeabc5445c7c2168dadb732c4b7a45deb (diff)
downloadlibgnome-volume-control-740bab171443cda76d27ca77ac31717475ad51dd.tar.gz
Gvc: make GvcMixerStreamPort a boxed type
It's a prerequisite for accessing it from JS https://bugzilla.gnome.org/show_bug.cgi?id=675902
-rw-r--r--gvc-mixer-control.c4
-rw-r--r--gvc-mixer-stream.c32
-rw-r--r--gvc-mixer-stream.h3
3 files changed, 28 insertions, 11 deletions
diff --git a/gvc-mixer-control.c b/gvc-mixer-control.c
index 3492925..b6f6a39 100644
--- a/gvc-mixer-control.c
+++ b/gvc-mixer-control.c
@@ -1470,7 +1470,7 @@ update_sink (GvcMixerControl *control,
for (i = 0; i < info->n_ports; i++) {
GvcMixerStreamPort *port;
- port = g_new0 (GvcMixerStreamPort, 1);
+ port = g_slice_new0 (GvcMixerStreamPort);
port->port = g_strdup (info->ports[i]->name);
port->human_port = g_strdup (info->ports[i]->description);
port->priority = info->ports[i]->priority;
@@ -1598,7 +1598,7 @@ update_source (GvcMixerControl *control,
for (i = 0; i < info->n_ports; i++) {
GvcMixerStreamPort *port;
- port = g_new0 (GvcMixerStreamPort, 1);
+ port = g_slice_new0 (GvcMixerStreamPort);
port->port = g_strdup (info->ports[i]->name);
port->human_port = g_strdup (info->ports[i]->description);
port->priority = info->ports[i]->priority;
diff --git a/gvc-mixer-stream.c b/gvc-mixer-stream.c
index 5a5c8e6..d3e01b6 100644
--- a/gvc-mixer-stream.c
+++ b/gvc-mixer-stream.c
@@ -88,6 +88,30 @@ static void gvc_mixer_stream_finalize (GObject *object);
G_DEFINE_ABSTRACT_TYPE (GvcMixerStream, gvc_mixer_stream, G_TYPE_OBJECT)
+static void
+free_port (GvcMixerStreamPort *p)
+{
+ g_free (p->port);
+ g_free (p->human_port);
+ g_slice_free (GvcMixerStreamPort, p);
+}
+
+static GvcMixerStreamPort *
+dup_port (GvcMixerStreamPort *p)
+{
+ GvcMixerStreamPort *m;
+
+ m = g_slice_new (GvcMixerStreamPort);
+
+ *m = *p;
+ m->port = g_strdup (p->port);
+ m->human_port = g_strdup (p->human_port);
+
+ return m;
+}
+
+G_DEFINE_BOXED_TYPE (GvcMixerStreamPort, gvc_mixer_stream_port, dup_port, free_port)
+
static guint32
get_next_stream_serial (void)
{
@@ -946,14 +970,6 @@ gvc_mixer_stream_init (GvcMixerStream *stream)
}
static void
-free_port (GvcMixerStreamPort *p)
-{
- g_free (p->port);
- g_free (p->human_port);
- g_free (p);
-}
-
-static void
gvc_mixer_stream_finalize (GObject *object)
{
GvcMixerStream *mixer_stream;
diff --git a/gvc-mixer-stream.h b/gvc-mixer-stream.h
index 846f2e0..435f933 100644
--- a/gvc-mixer-stream.h
+++ b/gvc-mixer-stream.h
@@ -64,7 +64,8 @@ typedef struct
gboolean available;
} GvcMixerStreamPort;
-GType gvc_mixer_stream_get_type (void);
+GType gvc_mixer_stream_port_get_type (void) G_GNUC_CONST;
+GType gvc_mixer_stream_get_type (void) G_GNUC_CONST;
guint gvc_mixer_stream_get_index (GvcMixerStream *stream);
guint gvc_mixer_stream_get_id (GvcMixerStream *stream);