]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: card: add GObject signal to handle event for element
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 18 Nov 2019 04:22:44 +0000 (13:22 +0900)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 12 Dec 2019 05:29:12 +0000 (14:29 +0900)
src/ctl/alsactl-sigs-marshal.list [new file with mode: 0644]
src/ctl/alsactl.map
src/ctl/card.c
src/ctl/card.h
src/ctl/meson.build
tests/alsactl-card

diff --git a/src/ctl/alsactl-sigs-marshal.list b/src/ctl/alsactl-sigs-marshal.list
new file mode 100644 (file)
index 0000000..448f209
--- /dev/null
@@ -0,0 +1 @@
+VOID:BOXED,FLAGS
index dfabb9a72bce52af6af777baef172de74a7d4f42..8641fa4c3ae3de86df80edc6ba03b71c6ae97b15 100644 (file)
@@ -25,6 +25,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsactl_card_replace_elems";
     "alsactl_card_remove_elems";
     "alsactl_card_create_source";
+    "alsactl_sigs_marshal_VOID__BOXED_FLAGS";
 
     "alsactl_card_info_get_type";
 
index 419b0201b6d617d76381092193e709d9ac6010f8..8ffcac3f28be92314345cca9532b077432b30240 100644 (file)
@@ -39,6 +39,12 @@ enum ctl_card_prop_type {
 };
 static GParamSpec *ctl_card_props[CTL_CARD_PROP_COUNT] = { NULL, };
 
+enum ctl_card_sig_type {
+    CTL_CARD_SIG_HANDLE_ELEM_EVENT = 0,
+    CTL_CARD_SIG_COUNT,
+};
+static guint ctl_card_sigs[CTL_CARD_SIG_COUNT] = { 0 };
+
 static void ctl_card_get_property(GObject *obj, guint id, GValue *val,
                                   GParamSpec *spec)
 {
@@ -95,6 +101,24 @@ static void alsactl_card_class_init(ALSACtlCardClass *klass)
 
     g_object_class_install_properties(gobject_class, CTL_CARD_PROP_COUNT,
                                       ctl_card_props);
+
+    /**
+     * ALSACtlCard::handle-elem-event:
+     * @self: A #ALSACtlCard.
+     * @elem_id: (transfer none): A #ALSACtlElemId.
+     * @events: A set of #ALSACtlEventMaskFlag.
+     *
+     * When event occurs for any element, this signal is emit.
+     */
+    ctl_card_sigs[CTL_CARD_SIG_HANDLE_ELEM_EVENT] =
+        g_signal_new("handle-elem-event",
+                     G_OBJECT_CLASS_TYPE(klass),
+                     G_SIGNAL_RUN_LAST,
+                     0,
+                     NULL, NULL,
+                     alsactl_sigs_marshal_VOID__BOXED_FLAGS,
+                     G_TYPE_NONE, 2, ALSACTL_TYPE_ELEM_ID,
+                     ALSACTL_TYPE_EVENT_MASK_FLAG);
 }
 
 static void alsactl_card_init(ALSACtlCard *self)
@@ -707,7 +731,7 @@ static gboolean ctl_card_dispatch_src(GSource *gsrc, GSourceFunc cb,
         // TODO: handle the event.
 
         len -= sizeof(*ev);
-       ++ev;
+        ++ev;
     }
 
     // Just be sure to continue to process this source.
index f5ea98ad64c2f887c7ad832b4a26312b074ed604..55b0ce8d0b423ede4587247878a6c277e1fcf544 100644 (file)
@@ -9,6 +9,8 @@
 #include <ctl/elem-id.h>
 #include <ctl/elem-info.h>
 
+#include <ctl/alsactl-sigs-marshal.h>
+
 G_BEGIN_DECLS
 
 #define ALSACTL_TYPE_CARD   (alsactl_card_get_type())
index c9342da752d99e41a74536edef58044f04809021..5f27f46998a6a55dd0f4e95aa98ef6f264648758 100644 (file)
@@ -6,7 +6,7 @@ path = 'ctl'
 name = 'alsactl'
 namespace = 'ALSACtl'
 has_enumerations = true
-has_marshaller = false
+has_marshaller = true
 
 sources = files(
   'query.c',
@@ -78,6 +78,7 @@ if has_marshaller
     sources: '@0@-sigs-marshal.list'.format(name),
     stdinc: true,
     install_header: true,
+    install_dir: join_paths(get_option('includedir'), meson.project_name(), path),
   )
   sources += signal_marshallers
 endif
index f348fc294d388384a6bf9c0bd5f59fdfe648ab9f..3cb633ce2978f633eb631d0ed58c28cb38a3305c 100644 (file)
@@ -29,7 +29,9 @@ methods = (
     'remove_elems',
     'create_source',
 )
-signals = ()
+signals = (
+    'handle-elem-event',
+)
 
 if not test(target, props, methods, signals):
     exit(ENXIO)