diff --git a/data/darktableconfig.xml.in b/data/darktableconfig.xml.in index 5cfe9440cb32..cc84e70ebb65 100644 --- a/data/darktableconfig.xml.in +++ b/data/darktableconfig.xml.in @@ -4007,6 +4007,6 @@ string order or exclude MIDI devices - comma-separated list of device name fragments that if matched load MIDI device at id given by location in list\nor if preceded by '-' prevent matching devices from loading. add encoding and number of knobs like 'BeatStep:63:16' + comma-separated list of device name fragments that if matched load MIDI device at id given by location in list\nadd encoding and number of knobs like 'Loupedeck:127,BeatStep:63:16'\nprefix with '-' to ignore matching devices\njust '-' stops loading all further devices or on its own disables midi completely diff --git a/src/libs/tools/midi.c b/src/libs/tools/midi.c index edbb724ee2d6..778d1d020c49 100644 --- a/src/libs/tools/midi.c +++ b/src/libs/tools/midi.c @@ -479,6 +479,11 @@ static gboolean _poll_devices(gpointer user_data) static void _midi_open_devices(dt_lib_module_t *self) { + dt_input_device_t id = dt_register_input_driver(self, &_driver_definition); + const char *devices_string = dt_conf_get_string_const("plugins/midi/devices"); + if(!strcmp(devices_string, "-")) + return; + if(Pm_Initialize()) { dt_print(DT_DEBUG_ALWAYS, "[_midi_open_devices] ERROR initialising PortMidi"); @@ -487,11 +492,7 @@ static void _midi_open_devices(dt_lib_module_t *self) else dt_print(DT_DEBUG_INPUT, "[_midi_open_devices] PortMidi initialized"); - dt_input_device_t id = dt_register_input_driver(self, &_driver_definition); - - const char *devices_string = dt_conf_get_string_const("plugins/midi/devices"); gchar **dev_strings = g_strsplit(devices_string, ",", 0); - int last_dev = -1; for(int i = 0; i < Pm_CountDevices(); i++) @@ -620,7 +621,10 @@ static void _midi_open_devices(dt_lib_module_t *self) g_strfreev(dev_strings); - if(self->data) g_timeout_add(10, _poll_devices, self); + if(self->data) + g_timeout_add(10, _poll_devices, self); + else + Pm_Terminate(); } static void _midi_device_free(dt_midi_device_t *midi) @@ -637,12 +641,13 @@ static void _midi_device_free(dt_midi_device_t *midi) static void _midi_close_devices(dt_lib_module_t *self) { - g_source_remove_by_user_data(self); - - g_slist_free_full(self->data, (void (*)(void *))_midi_device_free); - self->data = NULL; - - Pm_Terminate(); + if(self->data) + { + g_source_remove_by_user_data(self); + g_slist_free_full(self->data, (void (*)(void *))_midi_device_free); + self->data = NULL; + Pm_Terminate(); + } } static gboolean _update_devices(gpointer user_data)