frontend: Restore OBS wrappers in callbacks

Restore OBS wrappers so objects stay alive until their callbacks run.
This commit is contained in:
prgmitchell
2026-10-02 13:16:24 -04:00
committed by Ryan Foster
parent 97ca37291c
commit 04d8967656
5 changed files with 11 additions and 10 deletions
+3 -2
View File
@@ -67,10 +67,11 @@ obs_source_t *OBSStudioAPI::obs_frontend_get_current_scene()
void OBSStudioAPI::obs_frontend_set_current_scene(obs_source_t *scene)
{
if (main->IsPreviewProgramMode()) {
QMetaObject::invokeMethod(main, [this, scene]() { main->TransitionToScene(scene); }, WaitConnection());
QMetaObject::invokeMethod(
main, [this, scene = OBSSource(scene)]() { main->TransitionToScene(scene); }, WaitConnection());
} else {
QMetaObject::invokeMethod(main, qOverload<OBSSource, bool>(&OBSBasic::SetCurrentScene),
WaitConnection(), scene, false);
WaitConnection(), OBSSource(scene), false);
}
}
+2 -2
View File
@@ -208,8 +208,8 @@ void SourceTreeItem::ReconnectSignals()
auto removeItem = [](void *data, calldata_t *cd) {
SourceTreeItem *this_ = static_cast<SourceTreeItem *>(data);
obs_sceneitem_t *curItem = (obs_sceneitem_t *)calldata_ptr(cd, "item");
obs_scene_t *curScene = (obs_scene_t *)calldata_ptr(cd, "scene");
OBSSceneItem curItem = (obs_sceneitem_t *)calldata_ptr(cd, "item");
OBSScene curScene = (obs_scene_t *)calldata_ptr(cd, "scene");
if (curItem == this_->sceneitem) {
QMetaObject::invokeMethod(this_->tree, &SourceTree::Remove, curItem, curScene);
+2 -2
View File
@@ -638,7 +638,7 @@ bool OBSBasicFilters::nativeEvent(const QByteArray &, void *message, qintptr *)
void OBSBasicFilters::OBSSourceFilterAdded(void *param, calldata_t *data)
{
OBSBasicFilters *window = static_cast<OBSBasicFilters *>(param);
obs_source_t *filter = (obs_source_t *)calldata_ptr(data, "filter");
OBSSource filter = (obs_source_t *)calldata_ptr(data, "filter");
QMetaObject::invokeMethod(window, &OBSBasicFilters::AddFilter, filter, true);
}
@@ -646,7 +646,7 @@ void OBSBasicFilters::OBSSourceFilterAdded(void *param, calldata_t *data)
void OBSBasicFilters::OBSSourceFilterRemoved(void *param, calldata_t *data)
{
OBSBasicFilters *window = static_cast<OBSBasicFilters *>(param);
obs_source_t *filter = (obs_source_t *)calldata_ptr(data, "filter");
OBSSource filter = (obs_source_t *)calldata_ptr(data, "filter");
QMetaObject::invokeMethod(window, &OBSBasicFilters::RemoveFilter, filter);
}
+1 -1
View File
@@ -19,7 +19,7 @@
void OBSBasic::CanvasRemoved(void *data, calldata_t *params)
{
obs_canvas_t *canvas = static_cast<obs_canvas_t *>(calldata_ptr(params, "canvas"));
OBSCanvas canvas = static_cast<obs_canvas_t *>(calldata_ptr(params, "canvas"));
QMetaObject::invokeMethod(static_cast<OBSBasic *>(data), &OBSBasic::RemoveCanvas, canvas);
}
+3 -3
View File
@@ -199,7 +199,7 @@ void OBSBasic::RefreshSources(OBSScene scene)
void OBSBasic::SourceCreated(void *data, calldata_t *params)
{
obs_source_t *source = (obs_source_t *)calldata_ptr(params, "source");
OBSSource source = (obs_source_t *)calldata_ptr(params, "source");
if (obs_scene_from_source(source) != NULL) {
QMetaObject::invokeMethod(static_cast<OBSBasic *>(data), &OBSBasic::AddScene, WaitConnection(), source);
@@ -208,7 +208,7 @@ void OBSBasic::SourceCreated(void *data, calldata_t *params)
void OBSBasic::SourceRemoved(void *data, calldata_t *params)
{
obs_source_t *source = (obs_source_t *)calldata_ptr(params, "source");
OBSSource source = (obs_source_t *)calldata_ptr(params, "source");
if (obs_scene_from_source(source) != NULL) {
QMetaObject::invokeMethod(static_cast<OBSBasic *>(data), &OBSBasic::RemoveScene, source);
@@ -217,7 +217,7 @@ void OBSBasic::SourceRemoved(void *data, calldata_t *params)
void OBSBasic::SourceRenamed(void *data, calldata_t *params)
{
obs_source_t *source = (obs_source_t *)calldata_ptr(params, "source");
OBSSource source = (obs_source_t *)calldata_ptr(params, "source");
const char *newName = calldata_string(params, "new_name");
const char *prevName = calldata_string(params, "prev_name");