From d68484e7b7e9f08452636d8c72b78347634e8f81 Mon Sep 17 00:00:00 2001 From: Exeldro Date: Wed, 25 Nov 2020 13:05:31 +0100 Subject: [PATCH] UI: Handle (de)select scene items queued The (de)select signal can come from a obs_scene_enum_items which locks the scene. The Qt::QueuedConnection makes sure the (de)select is handled outside of that lock. Fixes the deadlock from #3673 --- UI/source-tree.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/UI/source-tree.cpp b/UI/source-tree.cpp index 34994f9f4..fb6718d4f 100644 --- a/UI/source-tree.cpp +++ b/UI/source-tree.cpp @@ -227,7 +227,8 @@ void SourceTreeItem::ReconnectSignals() (obs_sceneitem_t *)calldata_ptr(cd, "item"); if (curItem == this_->sceneitem) - QMetaObject::invokeMethod(this_, "Select"); + QMetaObject::invokeMethod(this_, "Select", + Qt::QueuedConnection); }; auto itemDeselect = [](void *data, calldata_t *cd) { @@ -237,7 +238,8 @@ void SourceTreeItem::ReconnectSignals() (obs_sceneitem_t *)calldata_ptr(cd, "item"); if (curItem == this_->sceneitem) - QMetaObject::invokeMethod(this_, "Deselect"); + QMetaObject::invokeMethod(this_, "Deselect", + Qt::QueuedConnection); }; auto reorderGroup = [](void *data, calldata_t *) {