Destroy IPlugFrame proxy together with IPlugView

Not that we have implemented `IPlugView::setFrame()` yet, but that
should be trivial at this point.
This commit is contained in:
Robbert van der Helm
2020-12-22 13:43:08 +01:00
parent 91c4b414b0
commit 37897da2b7
2 changed files with 16 additions and 1 deletions
+6 -1
View File
@@ -22,6 +22,7 @@
#include "vst3-impls/component-handler-proxy.h"
#include "vst3-impls/host-context-proxy.h"
#include "vst3-impls/plug-frame-proxy.h"
InstanceInterfaces::InstanceInterfaces() {}
@@ -70,9 +71,13 @@ void Vst3Bridge::run() {
main_context
.run_in_context([&]() {
// When the pointer gets dropped by the host, we want to
// drop it here as well
// drop it here as well, along with the `IPlugFrame`
// proxy object it may have received in
// `IPlugView::setFrame()`.
object_instances[request.owner_instance_id]
.plug_view.reset();
object_instances[request.owner_instance_id]
.plug_frame_proxy.reset();
})
.wait();
+10
View File
@@ -53,6 +53,16 @@ struct InstanceInterfaces {
*/
Steinberg::IPtr<Vst3HostContextProxy> host_context_proxy;
/**
* If the host passes an `IPlugFrame` object during `IPlugView::setFrame()`,
* then we'll store a proxy object here and then pass it to
* `plug_view->setFrame()`. Will be initialized with a null pointer until
* used. When we destroy `plug_view` while handling
* `Vst3PlugViewProxy::Destruct`, we'll also destroy (our pointer of) this
* proxy object.
*/
Steinberg::IPtr<Vst3PlugFrameProxy> plug_frame_proxy;
/**
* After a call to `IEditController::setComponentHandler()`, we'll create a
* proxy of that component handler just like we did for the plugin object.