diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2015-07-02 11:05:44 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2015-07-02 11:05:44 -0400 |
commit | 0ac9ef7c813f4e67ab1e9a5fb4aea515fd9f1b31 (patch) | |
tree | 2f1feeb5b4ba8c4c31634d4266b479c685354144 /libjack | |
parent | 601e3fe33ca2807acf8a7ebc5c056e0eed9b811a (diff) | |
download | jack1-0ac9ef7c813f4e67ab1e9a5fb4aea515fd9f1b31.tar.gz |
add support for port rename callback.
Diffstat (limited to 'libjack')
-rw-r--r-- | libjack/client.c | 17 | ||||
-rw-r--r-- | libjack/local.h | 2 | ||||
-rw-r--r-- | libjack/port.c | 31 |
3 files changed, 49 insertions, 1 deletions
diff --git a/libjack/client.c b/libjack/client.c index 11f6a9a..3fa4f73 100644 --- a/libjack/client.c +++ b/libjack/client.c @@ -2752,6 +2752,21 @@ jack_set_buffer_size_callback (jack_client_t *client, } int +jack_set_port_rename_callback (jack_client_t *client, + JackPortRenameCallback callback, + void *arg) +{ + if (client->control->active) { + jack_error ("You cannot set callbacks on an active client."); + return -1; + } + client->port_rename_arg = arg; + client->port_rename = callback; + client->control->port_rename_cbset = (callback != NULL); + return 0; +} + +int jack_set_port_registration_callback(jack_client_t *client, JackPortRegistrationCallback callback, void *arg) @@ -3090,6 +3105,8 @@ jack_event_type_name (JackEventType type) return "latency callback"; case PropertyChange: return "property change callback"; + case PortRename: + return "port rename"; default: break; } diff --git a/libjack/local.h b/libjack/local.h index 46d787d..7b63ce6 100644 --- a/libjack/local.h +++ b/libjack/local.h @@ -55,6 +55,8 @@ struct _jack_client { void *bufsize_arg; JackSampleRateCallback srate; void *srate_arg; + JackPortRenameCallback port_rename; + void *port_rename_arg; JackPortRegistrationCallback port_register; void *port_register_arg; JackPortConnectCallback port_connect; diff --git a/libjack/port.c b/libjack/port.c index 481f6e0..16a11b9 100644 --- a/libjack/port.c +++ b/libjack/port.c @@ -800,16 +800,45 @@ jack_port_type (const jack_port_t *port) } int +jack_port_rename (jack_client_t* client, jack_port_t *port, const char *new_name) +{ + int ret; + char* old_name = strdup (port->shared->name); + + if ((ret = jack_port_set_name (port, new_name)) == 0) { + + /* tell server about name change */ + jack_request_t req; + + req.type = PortNameChanged; + + /* re-purpose an appropriate part of the request union to convey the names */ + snprintf ((char *) req.x.connect.source_port, JACK_PORT_NAME_SIZE-1, old_name); + snprintf ((char *) req.x.connect.destination_port, JACK_PORT_NAME_SIZE-1, new_name); + + (void) jack_client_deliver_request (client, &req); + } + + free (old_name); + + return ret; +} +int jack_port_set_name (jack_port_t *port, const char *new_name) { char *colon; int len; + if (strcmp (new_name, port->shared->name) == 0) { + return 0; + } + colon = strchr (port->shared->name, ':'); len = sizeof (port->shared->name) - ((int) (colon - port->shared->name)) - 2; snprintf (colon+1, len, "%s", new_name); - + + return 0; } |