diff --git a/gtk2_ardour/vstfxwin.cc b/gtk2_ardour/vstfxwin.cc index eecfb0dc82..1831237db5 100755 --- a/gtk2_ardour/vstfxwin.cc +++ b/gtk2_ardour/vstfxwin.cc @@ -287,6 +287,29 @@ dispatch_x_events (XEvent* event, VSTState* vstfx) vstfx->eventProc((void*)event); } +static void +maybe_set_program (VSTState* vstfx) +{ + if (vstfx->want_program != -1) { + if (vstfx->vst_version >= 2) { + vstfx->plugin->dispatcher (vstfx->plugin, 67 /* effBeginSetProgram */, 0, 0, NULL, 0); + } + + vstfx->plugin->dispatcher (vstfx->plugin, effSetProgram, 0, vstfx->want_program, NULL, 0); + + if (vstfx->vst_version >= 2) { + vstfx->plugin->dispatcher (vstfx->plugin, 68 /* effEndSetProgram */, 0, 0, NULL, 0); + } + + vstfx->want_program = -1; + } + + if (vstfx->want_chunk == 1) { + vstfx->plugin->dispatcher (vstfx->plugin, 24 /* effSetChunk */, 1, vstfx->wanted_chunk_size, vstfx->wanted_chunk, 0); + vstfx->want_chunk = 0; + } +} + /** This is the main gui event loop for the plugin, we also need to pass any Xevents to all the UI callbacks plugins 'may' have registered on their windows, that is if they don't manage their own UIs **/ @@ -391,24 +414,9 @@ again: } } - /*Scheduled for setting a new program*/ - - if (vstfx->want_program != -1 ) - { - if (vstfx->vst_version >= 2) - { - vstfx->plugin->dispatcher (vstfx->plugin, 67 /* effBeginSetProgram */, 0, 0, NULL, 0); - } - - vstfx->plugin->dispatcher (vstfx->plugin, effSetProgram, 0, vstfx->want_program, NULL, 0); - - if (vstfx->vst_version >= 2) - { - vstfx->plugin->dispatcher (vstfx->plugin, 68 /* effEndSetProgram */, 0, 0, NULL, 0); - } - - vstfx->want_program = -1; - } + maybe_set_program (vstfx); + vstfx->want_program = -1; + vstfx->want_chunk = 0; /*scheduled call to dispatcher*/ diff --git a/libs/ardour/vst_plugin.cc b/libs/ardour/vst_plugin.cc index 130c43ede6..2d1a24ae93 100644 --- a/libs/ardour/vst_plugin.cc +++ b/libs/ardour/vst_plugin.cc @@ -56,10 +56,6 @@ VSTPlugin::set_plugin (AEffect* e) _plugin->dispatcher (_plugin, effSetSampleRate, 0, 0, NULL, (float) _session.frame_rate()); _plugin->dispatcher (_plugin, effSetBlockSize, 0, _session.get_block_size(), NULL, 0.0f); - - /* set program to zero */ - - _plugin->dispatcher (_plugin, effSetProgram, 0, 0, NULL, 0.0f); } void @@ -385,8 +381,8 @@ VSTPlugin::load_user_preset (PresetRecord r) return false; - } - else { + } else { + for (XMLNodeList::const_iterator j = (*i)->children().begin(); j != (*i)->children().end(); ++j) { if ((*j)->name() == X_("Parameter")) { XMLProperty* index = (*j)->property (X_("index")); @@ -425,8 +421,7 @@ VSTPlugin::do_save_preset (string name) p->add_content (string (data)); g_free (data); - } - else { + } else { p = new XMLNode (X_("Preset")); p->add_property (X_("uri"), uri);