]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: queue_info: add properties and constructors
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 20 Nov 2019 08:22:13 +0000 (17:22 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Tue, 7 Apr 2020 08:08:24 +0000 (17:08 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/seq/alsaseq.map
src/seq/queue-info.c
src/seq/queue-info.h
tests/alsaseq-queue-info

index 105a1febd936756b6b56477deba905387b6cb6e7..cb7da25dccd66a9fc63ab6847c848a60f5a8a7ff 100644 (file)
@@ -132,6 +132,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_subscribe_data_new";
 
     "alsaseq_queue_info_get_type";
+    "alsaseq_queue_info_new";
   local:
     *;
 };
index 2ba137730428cb1d82327cf8a5cbbbd801d76e70..c68826c85cf5b4b2fe167e00869df3859ec207fa 100644 (file)
 // SPDX-License-Identifier: LGPL-3.0-or-later
 #include "queue-info.h"
 
-G_DEFINE_TYPE(ALSASeqQueueInfo, alsaseq_queue_info, G_TYPE_OBJECT)
+#include <sound/asequencer.h>
+
+struct _ALSASeqQueueInfoPrivate {
+    struct snd_seq_queue_info info;
+};
+G_DEFINE_TYPE_WITH_PRIVATE(ALSASeqQueueInfo, alsaseq_queue_info, G_TYPE_OBJECT)
+
+enum seq_queue_info_prop_type {
+    SEQ_QUEUE_INFO_PROP_QUEUE_ID = 1,
+    SEQ_QUEUE_INFO_PROP_CLIENT_ID,
+    SEQ_QUEUE_INFO_PROP_LOCKED,
+    SEQ_QUEUE_INFO_PROP_NAME,
+    SEQ_QUEUE_INFO_PROP_COUNT,
+};
+static GParamSpec *seq_queue_info_props[SEQ_QUEUE_INFO_PROP_COUNT] = { NULL, };
+
+static void seq_queue_info_set_property(GObject *obj, guint id,
+                                         const GValue *val, GParamSpec *spec)
+{
+    ALSASeqQueueInfo *self = ALSASEQ_QUEUE_INFO(obj);
+    ALSASeqQueueInfoPrivate *priv =
+                                alsaseq_queue_info_get_instance_private(self);
+
+    switch (id) {
+    case SEQ_QUEUE_INFO_PROP_QUEUE_ID:
+        priv->info.queue = g_value_get_int(val);
+        break;
+    case SEQ_QUEUE_INFO_PROP_CLIENT_ID:
+        priv->info.owner = g_value_get_int(val);
+        break;
+    case SEQ_QUEUE_INFO_PROP_LOCKED:
+        priv->info.locked = g_value_get_boolean(val);
+        break;
+    case SEQ_QUEUE_INFO_PROP_NAME:
+        strncpy(priv->info.name, g_value_get_string(val), sizeof(priv->info.name));
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
+
+static void seq_queue_info_get_property(GObject *obj, guint id, GValue *val,
+                                         GParamSpec *spec)
+{
+    ALSASeqQueueInfo *self = ALSASEQ_QUEUE_INFO(obj);
+    ALSASeqQueueInfoPrivate *priv =
+                                alsaseq_queue_info_get_instance_private(self);
+
+    switch (id) {
+    case SEQ_QUEUE_INFO_PROP_QUEUE_ID:
+        g_value_set_int(val, priv->info.queue);
+        break;
+    case SEQ_QUEUE_INFO_PROP_CLIENT_ID:
+        g_value_set_int(val, priv->info.owner);
+        break;
+    case SEQ_QUEUE_INFO_PROP_LOCKED:
+        g_value_set_boolean(val, priv->info.locked);
+        break;
+    case SEQ_QUEUE_INFO_PROP_NAME:
+        g_value_set_static_string(val, priv->info.name);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
 
 static void alsaseq_queue_info_class_init(ALSASeqQueueInfoClass *klass)
 {
-    return;
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+    gobject_class->set_property = seq_queue_info_set_property;
+    gobject_class->get_property = seq_queue_info_get_property;
+
+    seq_queue_info_props[SEQ_QUEUE_INFO_PROP_QUEUE_ID] =
+        g_param_spec_int("queue-id", "queue-id",
+                         "The numerical ID of queue, except for one of "
+                         "ALSASeqSpecificClientId.",
+                         G_MININT, G_MAXINT,
+                         -1,
+                         G_PARAM_READWRITE);
+
+    seq_queue_info_props[SEQ_QUEUE_INFO_PROP_CLIENT_ID] =
+        g_param_spec_int("client-id", "client-id",
+                         "The numerical ID of client which owns the queue, "
+                         "except for one of ALSASeqSpecificClientId.",
+                         G_MININT, G_MAXINT,
+                         -1,
+                         G_PARAM_READWRITE);
+
+    seq_queue_info_props[SEQ_QUEUE_INFO_PROP_LOCKED] =
+        g_param_spec_boolean("locked", "locked",
+                             "Whether to be locked by the other queues or not.",
+                             FALSE,
+                             G_PARAM_READWRITE);
+
+    seq_queue_info_props[SEQ_QUEUE_INFO_PROP_NAME] =
+        g_param_spec_string("name", "name",
+                            "The name of queue.",
+                            "",
+                            G_PARAM_READWRITE);
+
+    g_object_class_install_properties(gobject_class,
+                                      SEQ_QUEUE_INFO_PROP_COUNT,
+                                      seq_queue_info_props);
 }
 
 static void alsaseq_queue_info_init(ALSASeqQueueInfo *self)
 {
     return;
 }
+
+/**
+ * alsaseq_queue_info_new:
+ *
+ * Allocate and return an instance of ALSASeqQueueInfo.
+ *
+ * Returns: A #ALSASeqQueueInfo.
+ */
+ALSASeqQueueInfo *alsaseq_queue_info_new()
+{
+    return g_object_new(ALSASEQ_TYPE_QUEUE_INFO, NULL);
+}
index aa2bcad41629c29358b1e3b37ca95ea1680f23ec..f7ad958d4205d6e5f8ce78f475eb1d14a5c4809d 100644 (file)
@@ -31,9 +31,12 @@ G_BEGIN_DECLS
 
 typedef struct _ALSASeqQueueInfo            ALSASeqQueueInfo;
 typedef struct _ALSASeqQueueInfoClass       ALSASeqQueueInfoClass;
+typedef struct _ALSASeqQueueInfoPrivate     ALSASeqQueueInfoPrivate;
 
 struct _ALSASeqQueueInfo {
     GObject parent_instance;
+
+    ALSASeqQueueInfoPrivate *priv;
 };
 
 struct _ALSASeqQueueInfoClass {
@@ -42,6 +45,8 @@ struct _ALSASeqQueueInfoClass {
 
 GType alsaseq_queue_info_get_type() G_GNUC_CONST;
 
+ALSASeqQueueInfo *alsaseq_queue_info_new();
+
 G_END_DECLS
 
 #endif
index ec387574d1dfa3453e266dd1a9d47874de9ba914..2220bb224f2f7f163723160cf3c91ea9049c1a41 100644 (file)
@@ -10,8 +10,15 @@ gi.require_version('ALSASeq', '0.0')
 from gi.repository import ALSASeq
 
 target = ALSASeq.QueueInfo()
-props = ()
-methods = ()
+props = (
+    'queue-id',
+    'client-id',
+    'locked',
+    'name',
+)
+methods = (
+    'new',
+)
 signals = ()
 
 if not test(target, props, methods, signals):