From edf6af6c4bcd0f3329131eedd3268d4b05c781e2 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Mon, 18 Nov 2019 13:22:44 +0900 Subject: [PATCH] ctl: card: add GObject signal to handle event for element --- src/ctl/alsactl-sigs-marshal.list | 1 + src/ctl/alsactl.map | 1 + src/ctl/card.c | 26 +++++++++++++++++++++++++- src/ctl/card.h | 2 ++ src/ctl/meson.build | 3 ++- tests/alsactl-card | 4 +++- 6 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 src/ctl/alsactl-sigs-marshal.list diff --git a/src/ctl/alsactl-sigs-marshal.list b/src/ctl/alsactl-sigs-marshal.list new file mode 100644 index 0000000..448f209 --- /dev/null +++ b/src/ctl/alsactl-sigs-marshal.list @@ -0,0 +1 @@ +VOID:BOXED,FLAGS diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index dfabb9a..8641fa4 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -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"; diff --git a/src/ctl/card.c b/src/ctl/card.c index 419b020..8ffcac3 100644 --- a/src/ctl/card.c +++ b/src/ctl/card.c @@ -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. diff --git a/src/ctl/card.h b/src/ctl/card.h index f5ea98a..55b0ce8 100644 --- a/src/ctl/card.h +++ b/src/ctl/card.h @@ -9,6 +9,8 @@ #include #include +#include + G_BEGIN_DECLS #define ALSACTL_TYPE_CARD (alsactl_card_get_type()) diff --git a/src/ctl/meson.build b/src/ctl/meson.build index c9342da..5f27f46 100644 --- a/src/ctl/meson.build +++ b/src/ctl/meson.build @@ -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 diff --git a/tests/alsactl-card b/tests/alsactl-card index f348fc2..3cb633c 100644 --- a/tests/alsactl-card +++ b/tests/alsactl-card @@ -29,7 +29,9 @@ methods = ( 'remove_elems', 'create_source', ) -signals = () +signals = ( + 'handle-elem-event', +) if not test(target, props, methods, signals): exit(ENXIO) -- 2.47.3