diff options
Diffstat (limited to 'libmatemixer/matemixer-stored-control.c')
-rw-r--r-- | libmatemixer/matemixer-stored-control.c | 108 |
1 files changed, 96 insertions, 12 deletions
diff --git a/libmatemixer/matemixer-stored-control.c b/libmatemixer/matemixer-stored-control.c index eb2a448..d150490 100644 --- a/libmatemixer/matemixer-stored-control.c +++ b/libmatemixer/matemixer-stored-control.c @@ -23,20 +23,104 @@ #include "matemixer-stream-control.h" #include "matemixer-stored-control.h" -G_DEFINE_INTERFACE (MateMixerStoredControl, mate_mixer_stored_control, MATE_MIXER_TYPE_STREAM_CONTROL) +struct _MateMixerStoredControlPrivate +{ + MateMixerDirection direction; +}; + +enum { + PROP_0, + PROP_DIRECTION, + N_PROPERTIES +}; + +static GParamSpec *properties[N_PROPERTIES] = { NULL, }; + +static void mate_mixer_stored_control_class_init (MateMixerStoredControlClass *klass); + +static void mate_mixer_stored_control_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); +static void mate_mixer_stored_control_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec); + +static void mate_mixer_stored_control_init (MateMixerStoredControl *control); + +G_DEFINE_ABSTRACT_TYPE (MateMixerStoredControl, mate_mixer_stored_control, MATE_MIXER_TYPE_STREAM_CONTROL) + +static void +mate_mixer_stored_control_class_init (MateMixerStoredControlClass *klass) +{ + GObjectClass *object_class; + + object_class = G_OBJECT_CLASS (klass); + object_class->get_property = mate_mixer_stored_control_get_property; + object_class->set_property = mate_mixer_stored_control_set_property; + + properties[PROP_DIRECTION] = + g_param_spec_enum ("direction", + "Direction", + "Direction of the stored control", + MATE_MIXER_TYPE_DIRECTION, + MATE_MIXER_DIRECTION_UNKNOWN, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (object_class, N_PROPERTIES, properties); + + g_type_class_add_private (object_class, sizeof (MateMixerStoredControlPrivate)); +} + +static void +mate_mixer_stored_control_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + MateMixerStoredControl *control; + + control = MATE_MIXER_STORED_CONTROL (object); + + switch (param_id) { + case PROP_DIRECTION: + g_value_set_enum (value, control->priv->direction); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + +static void +mate_mixer_stored_control_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + MateMixerStoredControl *control; + + control = MATE_MIXER_STORED_CONTROL (object); + + switch (param_id) { + case PROP_DIRECTION: + control->priv->direction = g_value_get_enum (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} static void -mate_mixer_stored_control_default_init (MateMixerStoredControlInterface *iface) +mate_mixer_stored_control_init (MateMixerStoredControl *control) { - g_object_interface_install_property (iface, - g_param_spec_enum ("direction", - "Direction", - "Direction of the stored control", - MATE_MIXER_TYPE_DIRECTION, - MATE_MIXER_DIRECTION_UNKNOWN, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS)); + control->priv = G_TYPE_INSTANCE_GET_PRIVATE (control, + MATE_MIXER_TYPE_STORED_CONTROL, + MateMixerStoredControlPrivate); } /** @@ -48,5 +132,5 @@ mate_mixer_stored_control_get_direction (MateMixerStoredControl *control) { g_return_val_if_fail (MATE_MIXER_IS_STORED_CONTROL (control), MATE_MIXER_DIRECTION_UNKNOWN); - return MATE_MIXER_STORED_CONTROL_GET_INTERFACE (control)->get_direction (control); + return control->priv->direction; } |