GUI part of LV2 midnam race condition fix
authorRobin Gareus <robin@gareus.org>
Sat, 9 Sep 2017 01:07:43 +0000 (03:07 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 9 Sep 2017 01:08:46 +0000 (03:08 +0200)
..and support for midnam patches on MIDI Busses.

gtk2_ardour/generic_pluginui.cc
gtk2_ardour/midi_time_axis.cc

index 1f38efea449bb461c186a2750f16ec257d2eb38c..62a69bef1eb1ebe80a4d1167d4022bad0e44ee5d 100644 (file)
@@ -677,6 +677,8 @@ GenericPluginUI::build_midi_table ()
                pgm_table->attach (*cui, col, col + 1, row, row+1, FILL|EXPAND, FILL);
        }
 
+       insert->plugin ()->read_midnam();
+
        midi_refill_patches ();
 
        insert->plugin()->BankPatchChange.connect (
@@ -684,12 +686,7 @@ GenericPluginUI::build_midi_table ()
                        boost::bind (&GenericPluginUI::midi_bank_patch_change, this, _1),
                        gui_context());
 
-       /* Note: possible race with MidiTimeAxisView::update_patch_selector()
-        * which uses this signal to update/re-register the midnam (also in gui context).
-        * MTAV does register before us, so the midnam should already be updated when
-        * we're notified.
-        */
-       insert->plugin()->UpdateMidnam.connect (
+       insert->plugin()->UpdatedMidnam.connect (
                        midi_connections, invalidator (*this),
                        boost::bind (&GenericPluginUI::midi_refill_patches, this),
                        gui_context());
index 3627074bc89df026bf4900a6b4caf14433a9b168..c8476dc83e5ea0dc0014e77299168924bcac8b0e 100644 (file)
@@ -427,6 +427,7 @@ MidiTimeAxisView::update_patch_selector ()
                        pi->plugin()->UpdateMidnam.connect (midnam_connection, invalidator (*this),
                                        boost::bind (&MidiTimeAxisView::reread_midnam, this),
                                        gui_context());
+                       reread_midnam ();
 
                        pluginprovided = true;
                        std::string model_name = pi->plugin ()->midnam_model ();
@@ -450,9 +451,9 @@ MidiTimeAxisView::reread_midnam ()
 {
        boost::shared_ptr<Processor> the_instrument (_route->the_instrument());
        boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert>(the_instrument);
-       pi->plugin ()->read_midnam();
+       bool rv = pi->plugin ()->read_midnam();
 
-       if (_patch_change_dialog) {
+       if (rv && _patch_change_dialog) {
                _patch_change_dialog->refresh ();
        }
 }