diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index f7d65878..c6010f28 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -92,6 +92,7 @@ using ControlRequest = YaEditController2::OpenAboutBox, YaEditControllerHostEditing::BeginEditFromHost, YaEditControllerHostEditing::EndEditFromHost, + YaInfoListener::SetChannelContextInfos, YaKeyswitchController::GetKeyswitchCount, YaKeyswitchController::GetKeyswitchInfo, YaMidiMapping::GetMidiControllerAssignment, diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index 6f61d46a..4d0a2a51 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -524,10 +524,16 @@ Vst3PluginProxyImpl::endEditFromHost(Steinberg::Vst::ParamID paramID) { tresult PLUGIN_API Vst3PluginProxyImpl::setChannelContextInfos( Steinberg::Vst::IAttributeList* list) { - // TODO: Implement - bridge.logger.log( - "TODO: Implement IInfoListener::setChannelContextInfos()"); - return Steinberg::kNotImplemented; + if (list) { + return bridge.send_message(YaInfoListener::SetChannelContextInfos{ + .instance_id = instance_id(), + .list = YaAttributeList::read_channel_context(list)}); + } else { + bridge.logger.log( + "WARNING: Null pointer passed to " + "'IInfoListener::setChannelContextInfos()'"); + return Steinberg::kInvalidArgument; + } } int32 PLUGIN_API Vst3PluginProxyImpl::getKeyswitchCount(int32 busIndex, diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index 82f85a00..2a3d7670 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -45,6 +45,7 @@ InstanceInterfaces::InstanceInterfaces( edit_controller(object), edit_controller_2(object), edit_controller_host_editing(object), + info_listener(object), keyswitch_controller(object), midi_mapping(object), note_expression_controller(object), @@ -430,6 +431,11 @@ void Vst3Bridge::run() { .edit_controller_host_editing->endEditFromHost( request.param_id); }, + [&](YaInfoListener::SetChannelContextInfos& request) + -> YaInfoListener::SetChannelContextInfos::Response { + return object_instances[request.instance_id] + .info_listener->setChannelContextInfos(&request.list); + }, [&](const YaKeyswitchController::GetKeyswitchCount& request) -> YaKeyswitchController::GetKeyswitchCount::Response { return object_instances[request.instance_id] diff --git a/src/wine-host/bridges/vst3.h b/src/wine-host/bridges/vst3.h index 1137c580..61032d4b 100644 --- a/src/wine-host/bridges/vst3.h +++ b/src/wine-host/bridges/vst3.h @@ -155,6 +155,8 @@ struct InstanceInterfaces { Steinberg::FUnknownPtr edit_controller_2; Steinberg::FUnknownPtr edit_controller_host_editing; + Steinberg::FUnknownPtr + info_listener; Steinberg::FUnknownPtr keyswitch_controller; Steinberg::FUnknownPtr midi_mapping;