static void port_autoconnect(struct cbox_jack_io_impl *jii, jack_port_t *portobj, struct cbox_command_target *fb) { struct cbox_io *io = jii->ioi.pio; for (uint32_t i = 0; i < io->io_env.output_count; i++) { gchar *cbox_port = g_strdup_printf("%s:out_%d", jii->client_name, 1 + i); gchar *config_key = g_strdup_printf("out_%d", 1 + i); autoconnect_by_var(jii->client, cbox_port, config_key, 0, 0, portobj, fb); g_free(cbox_port); g_free(config_key); } for (uint32_t i = 0; i < io->io_env.input_count; i++) { gchar *cbox_port = g_strdup_printf("%s:in_%d", jii->client_name, 1 + i); gchar *config_key = g_strdup_printf("in_%d", 1 + i); autoconnect_by_var(jii->client, cbox_port, config_key, 1, 0, portobj, fb); g_free(cbox_port); g_free(config_key); } for (GSList *p = io->midi_outputs; p; p = g_slist_next(p)) { struct cbox_jack_midi_output *midiout = p->data; if (midiout->autoconnect_spec) { gchar *cbox_port = g_strdup_printf("%s:%s", jii->client_name, midiout->hdr.name); autoconnect_by_spec(jii->client, cbox_port, midiout->autoconnect_spec, 0, 1, portobj, fb); g_free(cbox_port); } } for (GSList *p = io->midi_inputs; p; p = g_slist_next(p)) { struct cbox_jack_midi_input *midiin = p->data; if (midiin->autoconnect_spec) { gchar *cbox_port = g_strdup_printf("%s:%s", jii->client_name, midiin->hdr.name); autoconnect_by_spec(jii->client, cbox_port, midiin->autoconnect_spec, 1, 1, portobj, fb); g_free(cbox_port); } } for (GSList *p = io->audio_outputs; p; p = g_slist_next(p)) { struct cbox_jack_audio_output *audioout = p->data; if (audioout->autoconnect_spec) { gchar *cbox_port = g_strdup_printf("%s:%s", jii->client_name, audioout->hdr.name); autoconnect_by_spec(jii->client, cbox_port, audioout->autoconnect_spec, 0, 1, portobj, fb); g_free(cbox_port); } } gchar *cbox_port = g_strdup_printf("%s:midi", jii->client_name); autoconnect_by_var(jii->client, cbox_port, "midi", 1, 1, portobj, fb); g_free(cbox_port); }
void cbox_jack_midi_output_set_autoconnect(struct cbox_jack_midi_output *jmo, const gchar *autoconnect_spec) { if (jmo->autoconnect_spec) g_free(jmo->autoconnect_spec); jmo->autoconnect_spec = autoconnect_spec && *autoconnect_spec ? g_strdup(autoconnect_spec) : NULL; if (jmo->autoconnect_spec) { gchar *cbox_port = g_strdup_printf("%s:%s", jmo->jii->client_name, jmo->hdr.name); autoconnect_by_spec(jmo->jii->client, cbox_port, jmo->autoconnect_spec, 0, 1, NULL, NULL); g_free(cbox_port); } }
void cbox_jack_port_set_autoconnect(gchar **spec_ptr, const gchar *autoconnect_spec, struct cbox_jack_io_impl *jii, const gchar *port_name, gboolean is_cbox_input, gboolean is_midi) { if (*spec_ptr) g_free(*spec_ptr); *spec_ptr = autoconnect_spec && *autoconnect_spec ? g_strdup(autoconnect_spec) : NULL; if (*spec_ptr) { gchar *cbox_port = g_strdup_printf("%s:%s", jii->client_name, port_name); autoconnect_by_spec(jii->client, cbox_port, *spec_ptr, is_cbox_input, is_midi, NULL, NULL); g_free(cbox_port); } }
static void autoconnect_by_var(jack_client_t *client, const char *port, const char *config_var, int is_cbox_input, int is_midi, const jack_port_t *only_connect_port, struct cbox_command_target *fb) { const char *orig_spec = cbox_config_get_string(cbox_io_section, config_var); if (orig_spec) autoconnect_by_spec(client, port, orig_spec, is_cbox_input, is_midi, only_connect_port, fb); }