From: Takashi Sakamoto Date: Wed, 1 Apr 2020 09:13:28 +0000 (+0900) Subject: seq: subscribe_data: add properties X-Git-Tag: v0.1.0~252 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=5390f36cad43b50e9b6d0ba950624ff814a9fb36;p=alsa-gobject.git seq: subscribe_data: add properties Signed-off-by: Takashi Sakamoto --- diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index d7c03f3..230c640 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -122,6 +122,7 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_event_data_connect_set_dst"; "alsaseq_subscribe_data_get_type"; + "alsaseq_subscribe_data_new"; local: *; }; diff --git a/src/seq/subscribe-data.c b/src/seq/subscribe-data.c index d46a8d2..2b8746a 100644 --- a/src/seq/subscribe-data.c +++ b/src/seq/subscribe-data.c @@ -1,14 +1,134 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "subscribe-data.h" -G_DEFINE_TYPE(ALSASeqSubscribeData, alsaseq_subscribe_data, G_TYPE_OBJECT) +#include + +struct _ALSASeqSubscribeDataPrivate { + struct snd_seq_port_subscribe data; +}; +G_DEFINE_TYPE_WITH_PRIVATE(ALSASeqSubscribeData, alsaseq_subscribe_data, G_TYPE_OBJECT) + +enum seq_subscribe_data_prop_type { + SEQ_SUBSCRIBE_DATA_PROP_SENDER = 1, + SEQ_SUBSCRIBE_DATA_PROP_DEST, + SEQ_SUBSCRIBE_DATA_PROP_FLAG, + SEQ_SUBSCRIBE_DATA_PROP_QUEUE_ID, + SEQ_SUBSCRIBE_DATA_PROP_COUNT, +}; +static GParamSpec *seq_subscribe_data_props[SEQ_SUBSCRIBE_DATA_PROP_COUNT] = { NULL, }; + +static void seq_subscribe_data_set_property(GObject *obj, guint id, + const GValue *val, GParamSpec *spec) +{ + ALSASeqSubscribeData *self = ALSASEQ_SUBSCRIBE_DATA(obj); + ALSASeqSubscribeDataPrivate *priv = + alsaseq_subscribe_data_get_instance_private(self); + + switch (id) { + case SEQ_SUBSCRIBE_DATA_PROP_SENDER: + { + ALSASeqAddr *addr = g_value_get_boxed(val); + priv->data.sender = *addr; + break; + } + case SEQ_SUBSCRIBE_DATA_PROP_DEST: + { + ALSASeqAddr *addr = g_value_get_boxed(val); + priv->data.dest = *addr; + break; + } + case SEQ_SUBSCRIBE_DATA_PROP_FLAG: + priv->data.flags = (unsigned int)g_value_get_flags(val); + break; + case SEQ_SUBSCRIBE_DATA_PROP_QUEUE_ID: + priv->data.queue = g_value_get_uchar(val); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec); + break; + } +} + +static void seq_subscribe_data_get_property(GObject *obj, guint id, GValue *val, + GParamSpec *spec) +{ + ALSASeqSubscribeData *self = ALSASEQ_SUBSCRIBE_DATA(obj); + ALSASeqSubscribeDataPrivate *priv = + alsaseq_subscribe_data_get_instance_private(self); + + switch (id) { + case SEQ_SUBSCRIBE_DATA_PROP_SENDER: + g_value_set_static_boxed(val, &priv->data.sender); + break; + case SEQ_SUBSCRIBE_DATA_PROP_DEST: + g_value_set_static_boxed(val, &priv->data.dest); + break; + case SEQ_SUBSCRIBE_DATA_PROP_FLAG: + g_value_set_flags(val, (ALSASeqPortSubscribeFlag)priv->data.flags); + break; + case SEQ_SUBSCRIBE_DATA_PROP_QUEUE_ID: + g_value_set_uchar(val, priv->data.queue); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec); + break; + } +} static void alsaseq_subscribe_data_class_init(ALSASeqSubscribeDataClass *klass) { - return; + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + + gobject_class->set_property = seq_subscribe_data_set_property; + gobject_class->get_property = seq_subscribe_data_get_property; + + seq_subscribe_data_props[SEQ_SUBSCRIBE_DATA_PROP_SENDER] = + g_param_spec_boxed("sender", "sender", + "The address of sender.", + ALSASEQ_TYPE_ADDR, + G_PARAM_READWRITE); + + seq_subscribe_data_props[SEQ_SUBSCRIBE_DATA_PROP_DEST] = + g_param_spec_boxed("dest", "dest", + "The address of destination.", + ALSASEQ_TYPE_ADDR, + G_PARAM_READWRITE); + + seq_subscribe_data_props[SEQ_SUBSCRIBE_DATA_PROP_FLAG] = + g_param_spec_flags("flag", "flag", + "The attributee flag, a set of " + "ALSASeqPortSubscribeFlag.", + ALSASEQ_TYPE_PORT_SUBSCRIBE_FLAG, + 0, + G_PARAM_READWRITE); + + seq_subscribe_data_props[SEQ_SUBSCRIBE_DATA_PROP_QUEUE_ID] = + g_param_spec_uchar("queue-id", "queue-id", + "The numerical ID of queue to deliver. One of " + "ALSASeqSpecificQueueId is available as well as " + "any numerical value.", + 0, G_MAXUINT8, + 0, + G_PARAM_READWRITE); + + g_object_class_install_properties(gobject_class, + SEQ_SUBSCRIBE_DATA_PROP_COUNT, + seq_subscribe_data_props); } static void alsaseq_subscribe_data_init(ALSASeqSubscribeData *self) { return; } + +/** + * alsaseq_subscribe_data_new: + * + * Allocates and returns the instance of ALSASeqSubscribeData class. + * + * Returns: (transfer full): A #ALSASeqSubscribeData. + */ +ALSASeqSubscribeData *alsaseq_subscribe_data_new() +{ + return g_object_new(ALSASEQ_TYPE_SUBSCRIBE_DATA, NULL); +} diff --git a/src/seq/subscribe-data.h b/src/seq/subscribe-data.h index 4e397b3..00e60e4 100644 --- a/src/seq/subscribe-data.h +++ b/src/seq/subscribe-data.h @@ -5,6 +5,9 @@ #include #include +#include +#include + G_BEGIN_DECLS #define ALSASEQ_TYPE_SUBSCRIBE_DATA (alsaseq_subscribe_data_get_type()) @@ -31,9 +34,12 @@ G_BEGIN_DECLS typedef struct _ALSASeqSubscribeData ALSASeqSubscribeData; typedef struct _ALSASeqSubscribeDataClass ALSASeqSubscribeDataClass; +typedef struct _ALSASeqSubscribeDataPrivate ALSASeqSubscribeDataPrivate; struct _ALSASeqSubscribeData { GObject parent_instance; + + ALSASeqSubscribeData *priv; }; struct _ALSASeqSubscribeDataClass { @@ -42,6 +48,8 @@ struct _ALSASeqSubscribeDataClass { GType alsaseq_subscribe_data_get_type() G_GNUC_CONST; +ALSASeqSubscribeData *alsaseq_subscribe_data_new(); + G_END_DECLS #endif diff --git a/tests/alsaseq-subscribe-data b/tests/alsaseq-subscribe-data index b398323..043e8a1 100644 --- a/tests/alsaseq-subscribe-data +++ b/tests/alsaseq-subscribe-data @@ -10,8 +10,15 @@ gi.require_version('ALSASeq', '0.0') from gi.repository import ALSASeq target = ALSASeq.SubscribeData() -props = () -methods = () +props = ( + 'sender', + 'dest', + 'flag', + 'queue-id', +) +methods = ( + 'new', +) signals = () if not test(target, props, methods, signals):