diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index b9192aa4..002b974d 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -180,31 +180,33 @@ void serialize(S& s, AudioProcessorRequest& payload) { * information we want or the operation we want to perform. A request of type * `CallbackRequest(T)` should send back a `T::Response`. */ -using CallbackRequest = std::variant; +using CallbackRequest = + std::variant; template void serialize(S& s, CallbackRequest& payload) { diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index 4d0a2a51..3d6d032b 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -449,6 +449,7 @@ tresult PLUGIN_API Vst3PluginProxyImpl::setComponentHandler( // callback later component_handler_2 = component_handler; component_handler_3 = component_handler; + component_handler_bus_activation = component_handler; unit_handler = component_handler; unit_handler_2 = component_handler; diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.h b/src/plugin/bridges/vst3-impls/plugin-proxy.h index d48e2495..f2188a35 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.h +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.h @@ -334,6 +334,8 @@ class Vst3PluginProxyImpl : public Vst3PluginProxy { component_handler_2; Steinberg::FUnknownPtr component_handler_3; + Steinberg::FUnknownPtr + component_handler_bus_activation; Steinberg::FUnknownPtr unit_handler; Steinberg::FUnknownPtr unit_handler_2; diff --git a/src/plugin/bridges/vst3.cpp b/src/plugin/bridges/vst3.cpp index 92791ac4..7ce0e765 100644 --- a/src/plugin/bridges/vst3.cpp +++ b/src/plugin/bridges/vst3.cpp @@ -149,6 +149,17 @@ Vst3PluginBridge::Vst3PluginBridge() .context_menu_args = std::nullopt}; } }, + [&](const YaComponentHandlerBusActivation::RequestBusActivation& + request) -> YaComponentHandlerBusActivation:: + RequestBusActivation::Response { + return plugin_proxies + .at(request.owner_instance_id) + .get() + .component_handler_bus_activation + ->requestBusActivation( + request.type, request.dir, + request.index, request.state); + }, [&](const YaContextMenu::GetItemCount& request) -> YaContextMenu::GetItemCount::Response { return plugin_proxies.at(request.owner_instance_id) diff --git a/src/wine-host/bridges/vst3-impls/component-handler-proxy.cpp b/src/wine-host/bridges/vst3-impls/component-handler-proxy.cpp index f343e65d..0dd945fe 100644 --- a/src/wine-host/bridges/vst3-impls/component-handler-proxy.cpp +++ b/src/wine-host/bridges/vst3-impls/component-handler-proxy.cpp @@ -119,10 +119,13 @@ tresult PLUGIN_API Vst3ComponentHandlerProxyImpl::requestBusActivation( Steinberg::Vst::BusDirection dir, int32 index, TBool state) { - // TODO: Implement - std::cerr << "TODO: IComponentHandlerBusActivation::requestBusActivation()" - << std::endl; - return Steinberg::kNotImplemented; + return bridge.send_message( + YaComponentHandlerBusActivation::RequestBusActivation{ + .owner_instance_id = owner_instance_id(), + .type = type, + .dir = dir, + .index = index, + .state = state}); } tresult PLUGIN_API Vst3ComponentHandlerProxyImpl::notifyUnitSelection(