From 5dffba45845df60c9ff45792a2c2e7cf9ec67f2c Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Wed, 6 Jan 2021 22:50:56 +0100 Subject: [PATCH] Implement Vst3ContextMenuProxyImpl destructor --- src/common/logging/vst3.cpp | 10 ++++++++++ src/common/logging/vst3.h | 1 + src/common/serialization/vst3.h | 3 ++- src/plugin/bridges/vst3.cpp | 9 +++++++++ .../bridges/vst3-impls/context-menu-proxy.cpp | 9 +++------ 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/common/logging/vst3.cpp b/src/common/logging/vst3.cpp index 2655b1d2..418bdcc3 100644 --- a/src/common/logging/vst3.cpp +++ b/src/common/logging/vst3.cpp @@ -924,6 +924,16 @@ bool Vst3Logger::log_request(bool is_host_vst, }); } +bool Vst3Logger::log_request(bool is_host_vst, + const Vst3ContextMenuProxy::Destruct& request) { + return log_request_base(is_host_vst, [&](auto& message) { + // We don't know what class this instance was originally instantiated + // as, but it also doesn't really matter + message << request.owner_instance_id << ": ::~IContextMenu()"; + }); +} + bool Vst3Logger::log_request(bool is_host_vst, const WantsConfiguration&) { return log_request_base(is_host_vst, [&](auto& message) { message << "Requesting "; diff --git a/src/common/logging/vst3.h b/src/common/logging/vst3.h index bdeea073..a3c89ce0 100644 --- a/src/common/logging/vst3.h +++ b/src/common/logging/vst3.h @@ -170,6 +170,7 @@ class Vst3Logger { bool log_request(bool is_host_vst, const YaComponent::ActivateBus&); bool log_request(bool is_host_vst, const YaComponent::SetActive&); + bool log_request(bool is_host_vst, const Vst3ContextMenuProxy::Destruct&); bool log_request(bool is_host_vst, const WantsConfiguration&); bool log_request(bool is_host_vst, const YaComponentHandler::BeginEdit&); bool log_request(bool is_host_vst, const YaComponentHandler::PerformEdit&); diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index 7f9cdc93..53046055 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -170,7 +170,8 @@ 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(logger, false), overload{ + [&](const Vst3ContextMenuProxy::Destruct& request) + -> Vst3ContextMenuProxy::Destruct::Response { + assert( + plugin_proxies.at(request.owner_instance_id) + .get() + .unregister_context_menu(request.context_menu_id)); + + return Ack{}; + }, [&](const WantsConfiguration&) -> WantsConfiguration::Response { return config; }, diff --git a/src/wine-host/bridges/vst3-impls/context-menu-proxy.cpp b/src/wine-host/bridges/vst3-impls/context-menu-proxy.cpp index 55489bfe..eeeae52d 100644 --- a/src/wine-host/bridges/vst3-impls/context-menu-proxy.cpp +++ b/src/wine-host/bridges/vst3-impls/context-menu-proxy.cpp @@ -26,12 +26,9 @@ Vst3ContextMenuProxyImpl::Vst3ContextMenuProxyImpl( Vst3ContextMenuProxyImpl::~Vst3ContextMenuProxyImpl() { // Also drop the context menu smart pointer on plugin side when this gets // dropped - // TODO: Uncomment when we implement this - // bridge.send_message( - // Vst3ContextMenuProxy::Destruct{.owner_instance_id = - // owner_instance_id(), - // .context_menu_id = - // context_menu_id()}); + bridge.send_message( + Vst3ContextMenuProxy::Destruct{.owner_instance_id = owner_instance_id(), + .context_menu_id = context_menu_id()}); } tresult PLUGIN_API