diff options
author | David Robillard <d@drobilla.net> | 2012-03-12 00:24:11 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2012-03-12 00:24:11 +0000 |
commit | 7fd006e946e38bae4212b8d4e3ce4093207d0aee (patch) | |
tree | 8a8071887dfac393045cc4f161690090ad8cac16 /src/port.c | |
parent | a4811c2f8ca7d8e32d1230b58e8140b60fcee2a3 (diff) | |
download | ganv-7fd006e946e38bae4212b8d4e3ce4093207d0aee.tar.gz ganv-7fd006e946e38bae4212b8d4e3ce4093207d0aee.tar.bz2 ganv-7fd006e946e38bae4212b8d4e3ce4093207d0aee.zip |
Make port controls actually do something.
git-svn-id: http://svn.drobilla.net/lad/trunk/ganv@4051 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/port.c')
-rw-r--r-- | src/port.c | 30 |
1 files changed, 24 insertions, 6 deletions
@@ -36,6 +36,13 @@ enum { PROP_IS_INPUT }; +enum { + PORT_VALUE_CHANGED, + PORT_LAST_SIGNAL +}; + +static guint port_signals[PORT_LAST_SIGNAL]; + static void ganv_port_init(GanvPort* port) { @@ -252,6 +259,16 @@ ganv_port_class_init(GanvPortClass* class) 0, G_PARAM_READWRITE)); + port_signals[PORT_VALUE_CHANGED] + = g_signal_new("value-changed", + G_TYPE_FROM_CLASS(class), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + NULL, + G_TYPE_NONE, 1, + G_TYPE_VARIANT); + object_class->destroy = ganv_port_destroy; item_class->event = event; @@ -270,8 +287,7 @@ ganv_port_new(GanvModule* module, gboolean is_input, const char* first_prop_name, ...) { - GanvPort* port = GANV_PORT( - g_object_new(ganv_port_get_type(), NULL)); + GanvPort* port = GANV_PORT(g_object_new(ganv_port_get_type(), NULL)); port->impl->is_input = is_input; @@ -397,10 +413,12 @@ ganv_port_set_control_value(GanvPort* port, } ganv_box_set_width(impl->control->rect, MAX(0.0, w - 1.0)); -#if 0 - if (signal && _control->value == value) - signal = false; -#endif + + if (impl->control->value != value) { + GVariant* gvar = g_variant_new_double(value); + g_signal_emit(port, port_signals[PORT_VALUE_CHANGED], 0, gvar, NULL); + g_variant_unref(gvar); + } impl->control->value = value; |