summaryrefslogtreecommitdiff
path: root/libjack
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-07-02 11:05:44 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-07-02 11:05:44 -0400
commit0ac9ef7c813f4e67ab1e9a5fb4aea515fd9f1b31 (patch)
tree2f1feeb5b4ba8c4c31634d4266b479c685354144 /libjack
parent601e3fe33ca2807acf8a7ebc5c056e0eed9b811a (diff)
downloadjack1-0ac9ef7c813f4e67ab1e9a5fb4aea515fd9f1b31.tar.gz
add support for port rename callback.
Diffstat (limited to 'libjack')
-rw-r--r--libjack/client.c17
-rw-r--r--libjack/local.h2
-rw-r--r--libjack/port.c31
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;
}