From 340700aa9611bca20c37fe29fbb340101f3de67a Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Sun, 9 Feb 2020 12:20:53 +0900 Subject: [PATCH] timer: event_data: add properties Signed-off-by: Takashi Sakamoto --- src/timer/event-data.c | 57 ++++++++++++++++++++++++++++++++++++-- src/timer/event-data.h | 31 ++++++++++++--------- tests/alsatimer-event-data | 4 ++- 3 files changed, 76 insertions(+), 16 deletions(-) diff --git a/src/timer/event-data.c b/src/timer/event-data.c index 4c2f61c..296ad3d 100644 --- a/src/timer/event-data.c +++ b/src/timer/event-data.c @@ -1,11 +1,64 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "event-data.h" -G_DEFINE_ABSTRACT_TYPE(ALSATimerEventData, alsatimer_event_data, G_TYPE_OBJECT) +struct _ALSATimerEventDataPrivate { + ALSATimerEventDataType type; +}; +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(ALSATimerEventData, alsatimer_event_data, G_TYPE_OBJECT) + +enum timer_event_data_prop_type{ + TIMER_EVENT_DATA_PROP_EVENT_DATA_TYPE = 1, + TIMER_EVENT_DATA_PROP_COUNT, +}; +static GParamSpec *timer_event_data_props[TIMER_EVENT_DATA_PROP_COUNT] = { NULL, }; + +static void timer_event_data_set_property(GObject *obj, guint id, + const GValue *val, GParamSpec *spec) +{ + ALSATimerEventData *self = ALSATIMER_EVENT_DATA(obj); + ALSATimerEventDataPrivate *priv = alsatimer_event_data_get_instance_private(self); + + switch (id) { + case TIMER_EVENT_DATA_PROP_EVENT_DATA_TYPE: + priv->type = g_value_get_enum(val); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec); + break; + } +} + +static void timer_event_data_get_property(GObject *obj, guint id, GValue *val, GParamSpec *spec) +{ + ALSATimerEventData *self = ALSATIMER_EVENT_DATA(obj); + ALSATimerEventDataPrivate *priv = alsatimer_event_data_get_instance_private(self); + + switch (id) { + case TIMER_EVENT_DATA_PROP_EVENT_DATA_TYPE: + g_value_set_enum(val, priv->type); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec); + break; + } +} static void alsatimer_event_data_class_init(ALSATimerEventDataClass *klass) { - return; + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + + gobject_class->set_property = timer_event_data_set_property; + gobject_class->get_property = timer_event_data_get_property; + + timer_event_data_props[TIMER_EVENT_DATA_PROP_EVENT_DATA_TYPE] = + g_param_spec_enum("type", "type", + "The type of event_data, one of ALSATimerEventDataType.", + ALSATIMER_TYPE_EVENT_DATA_TYPE, + ALSATIMER_EVENT_DATA_TYPE_TICK, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); + + g_object_class_install_properties(gobject_class, TIMER_EVENT_DATA_PROP_COUNT, + timer_event_data_props); } static void alsatimer_event_data_init(ALSATimerEventData *self) diff --git a/src/timer/event-data.h b/src/timer/event-data.h index 9e550fb..ffda22c 100644 --- a/src/timer/event-data.h +++ b/src/timer/event-data.h @@ -5,35 +5,40 @@ #include #include +#include + G_BEGIN_DECLS #define ALSATIMER_TYPE_EVENT_DATA (alsatimer_event_data_get_type()) -#define ALSATIMER_EVENT_DATA(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - ALSATIMER_TYPE_EVENT_DATA, \ +#define ALSATIMER_EVENT_DATA(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + ALSATIMER_TYPE_EVENT_DATA, \ ALSATimerEventData)) -#define ALSATIMER_IS_EVENT_DATA(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ +#define ALSATIMER_IS_EVENT_DATA(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ ALSATIMER_TYPE_EVENT_DATA)) -#define ALSATIMER_EVENT_DATA_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - ALSATIMER_TYPE_EVENT_DATA, \ +#define ALSATIMER_EVENT_DATA_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + ALSATIMER_TYPE_EVENT_DATA, \ ALSATimerEventDataClass)) -#define ALSATIMER_IS_EVENT_DATA_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ +#define ALSATIMER_IS_EVENT_DATA_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ ALSATIMER_TYPE_EVENT_DATA)) -#define ALSATIMER_EVENT_DATA_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - ALSATIMER_TYPE_EVENT_DATA, \ +#define ALSATIMER_EVENT_DATA_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + ALSATIMER_TYPE_EVENT_DATA, \ ALSATimerEventDataClass)) typedef struct _ALSATimerEventData ALSATimerEventData; typedef struct _ALSATimerEventDataClass ALSATimerEventDataClass; +typedef struct _ALSATimerEventDataPrivate ALSATimerEventDataPrivate; struct _ALSATimerEventData { GObject parent_instance; + + ALSATimerEventDataPrivate *priv; }; struct _ALSATimerEventDataClass { diff --git a/tests/alsatimer-event-data b/tests/alsatimer-event-data index 26faf49..3856d7f 100644 --- a/tests/alsatimer-event-data +++ b/tests/alsatimer-event-data @@ -10,7 +10,9 @@ gi.require_version('ALSATimer', '0.0') from gi.repository import ALSATimer target = ALSATimer.EventData -props = () +props = ( + 'type', +) methods = () signals = () -- 2.47.3