X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmac_vst_plugin_ui.mm;h=2c0cd1c502a830715bccafddd095d5406fdce9d6;hb=a610157955af2f588f59d00ed585c2d842197c85;hp=2b10fc2a88e8190fbdb02e60e2d3fb4b65d032f4;hpb=35de5080a60fd648455557974f967f5e4090cbfb;p=ardour.git diff --git a/gtk2_ardour/mac_vst_plugin_ui.mm b/gtk2_ardour/mac_vst_plugin_ui.mm index 2b10fc2a88..2c0cd1c502 100644 --- a/gtk2_ardour/mac_vst_plugin_ui.mm +++ b/gtk2_ardour/mac_vst_plugin_ui.mm @@ -56,6 +56,8 @@ MacVSTPluginUI::MacVSTPluginUI (boost::shared_ptr pi, boost::share low_box.signal_realize().connect (mem_fun (this, &MacVSTPluginUI::lower_box_realized)); pack_start (low_box, true, true); low_box.show (); + vst->LoadPresetProgram.connect (_program_connection, invalidator (*this), boost::bind (&MacVSTPluginUI::set_program, this), gui_context()); + } MacVSTPluginUI::~MacVSTPluginUI () @@ -149,3 +151,30 @@ MacVSTPluginUI::idle () _vst->state()->wantIdle = plugin->dispatcher (plugin, effEditIdle, 0, 0, NULL, 0); return true; // _vst->state()->wantIdle; } + +void +MacVSTPluginUI::set_program () +{ + VSTState* vstfx = _vst->state(); + + 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) { + pthread_mutex_lock (&vstfx->state_lock); + vstfx->plugin->dispatcher (vstfx->plugin, 24 /* effSetChunk */, 1, vstfx->wanted_chunk_size, vstfx->wanted_chunk, 0); + vstfx->want_chunk = 0; + pthread_mutex_unlock (&vstfx->state_lock); + } +}