summaryrefslogtreecommitdiffstats
path: root/src/port.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-03-12 00:24:11 +0000
committerDavid Robillard <d@drobilla.net>2012-03-12 00:24:11 +0000
commit7fd006e946e38bae4212b8d4e3ce4093207d0aee (patch)
tree8a8071887dfac393045cc4f161690090ad8cac16 /src/port.c
parenta4811c2f8ca7d8e32d1230b58e8140b60fcee2a3 (diff)
downloadganv-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.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/port.c b/src/port.c
index e8e6754..58e7629 100644
--- a/src/port.c
+++ b/src/port.c
@@ -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;