UI: Ignore sources selection self-update roundtrips

master
Palana 2015-06-27 03:32:33 +02:00
parent 41689fe746
commit 66fd1b2e80
2 changed files with 15 additions and 2 deletions

View File

@ -1206,7 +1206,7 @@ void OBSBasic::RenameSources(QString newName, QString prevName)
void OBSBasic::SelectSceneItem(OBSScene scene, OBSSceneItem item, bool select)
{
if (scene != GetCurrentScene())
if (scene != GetCurrentScene() || ignoreSelectionUpdate)
return;
for (int i = 0; i < ui->sources->count(); i++) {
@ -2326,7 +2326,19 @@ void OBSBasic::on_sources_currentItemChanged(QListWidgetItem *current,
if ((obs_source_get_output_flags(source) & OBS_SOURCE_VIDEO) == 0)
return;
obs_scene_enum_items(GetCurrentScene(), select_one, &item);
auto IgnoreSelfUpdate = [&](obs_scene_t *scene)
{
ignoreSelectionUpdate = true;
obs_scene_enum_items(scene, select_one, &item);
ignoreSelectionUpdate = false;
};
using IgnoreSelfUpdate_t = decltype(IgnoreSelfUpdate);
obs_scene_atomic_update(GetCurrentScene(),
[](void *data, obs_scene_t *scene)
{
(*static_cast<IgnoreSelfUpdate_t*>(data))(scene);
}, static_cast<void*>(&IgnoreSelfUpdate));
UNUSED_PARAMETER(prev);
}

View File

@ -96,6 +96,7 @@ private:
gs_vertbuffer_t *circle = nullptr;
bool sceneChanging = false;
bool ignoreSelectionUpdate = false;
int previewX = 0, previewY = 0;
int previewCX = 0, previewCY = 0;