mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-09 20:29:10 +02:00
Call IPlugView::on* from the UI thread
Since these can trigger a redraw.
This commit is contained in:
@@ -371,20 +371,34 @@ void Vst3Bridge::run() {
|
|||||||
},
|
},
|
||||||
[&](const YaPlugView::OnWheel& request)
|
[&](const YaPlugView::OnWheel& request)
|
||||||
-> YaPlugView::OnWheel::Response {
|
-> YaPlugView::OnWheel::Response {
|
||||||
return object_instances[request.owner_instance_id]
|
// Since all of these `IPlugView::on*` functions can cause a
|
||||||
.plug_view->onWheel(request.distance);
|
// redraw, they all have to be called from the UI thread
|
||||||
|
return main_context
|
||||||
|
.run_in_context<tresult>([&]() {
|
||||||
|
return object_instances[request.owner_instance_id]
|
||||||
|
.plug_view->onWheel(request.distance);
|
||||||
|
})
|
||||||
|
.get();
|
||||||
},
|
},
|
||||||
[&](const YaPlugView::OnKeyDown& request)
|
[&](const YaPlugView::OnKeyDown& request)
|
||||||
-> YaPlugView::OnKeyDown::Response {
|
-> YaPlugView::OnKeyDown::Response {
|
||||||
return object_instances[request.owner_instance_id]
|
return main_context
|
||||||
.plug_view->onKeyDown(request.key, request.key_code,
|
.run_in_context<tresult>([&]() {
|
||||||
request.modifiers);
|
return object_instances[request.owner_instance_id]
|
||||||
|
.plug_view->onKeyDown(request.key, request.key_code,
|
||||||
|
request.modifiers);
|
||||||
|
})
|
||||||
|
.get();
|
||||||
},
|
},
|
||||||
[&](const YaPlugView::OnKeyUp& request)
|
[&](const YaPlugView::OnKeyUp& request)
|
||||||
-> YaPlugView::OnKeyUp::Response {
|
-> YaPlugView::OnKeyUp::Response {
|
||||||
return object_instances[request.owner_instance_id]
|
return main_context
|
||||||
.plug_view->onKeyUp(request.key, request.key_code,
|
.run_in_context<tresult>([&]() {
|
||||||
request.modifiers);
|
return object_instances[request.owner_instance_id]
|
||||||
|
.plug_view->onKeyUp(request.key, request.key_code,
|
||||||
|
request.modifiers);
|
||||||
|
})
|
||||||
|
.get();
|
||||||
},
|
},
|
||||||
[&](YaPlugView::GetSize& request) -> YaPlugView::GetSize::Response {
|
[&](YaPlugView::GetSize& request) -> YaPlugView::GetSize::Response {
|
||||||
const tresult result =
|
const tresult result =
|
||||||
@@ -395,13 +409,21 @@ void Vst3Bridge::run() {
|
|||||||
.result = result, .updated_size = request.size};
|
.result = result, .updated_size = request.size};
|
||||||
},
|
},
|
||||||
[&](YaPlugView::OnSize& request) -> YaPlugView::OnSize::Response {
|
[&](YaPlugView::OnSize& request) -> YaPlugView::OnSize::Response {
|
||||||
return object_instances[request.owner_instance_id]
|
return main_context
|
||||||
.plug_view->onSize(&request.new_size);
|
.run_in_context<tresult>([&]() {
|
||||||
|
return object_instances[request.owner_instance_id]
|
||||||
|
.plug_view->onSize(&request.new_size);
|
||||||
|
})
|
||||||
|
.get();
|
||||||
},
|
},
|
||||||
[&](const YaPlugView::OnFocus& request)
|
[&](const YaPlugView::OnFocus& request)
|
||||||
-> YaPlugView::OnFocus::Response {
|
-> YaPlugView::OnFocus::Response {
|
||||||
return object_instances[request.owner_instance_id]
|
return main_context
|
||||||
.plug_view->onFocus(request.state);
|
.run_in_context<tresult>([&]() {
|
||||||
|
return object_instances[request.owner_instance_id]
|
||||||
|
.plug_view->onFocus(request.state);
|
||||||
|
})
|
||||||
|
.get();
|
||||||
},
|
},
|
||||||
[&](YaPlugView::SetFrame& request)
|
[&](YaPlugView::SetFrame& request)
|
||||||
-> YaPlugView::SetFrame::Response {
|
-> YaPlugView::SetFrame::Response {
|
||||||
|
|||||||
Reference in New Issue
Block a user