mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-10-16 15:43:12 +08:00
frontend: Restore OBS wrappers in callbacks
Restore OBS wrappers so objects stay alive until their callbacks run.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user