Browse Source

UI: Ignore sources selection self-update roundtrips

Palana 10 years ago
parent
commit
66fd1b2e80
2 changed files with 15 additions and 2 deletions
  1. 14 2
      obs/window-basic-main.cpp
  2. 1 0
      obs/window-basic-main.hpp

+ 14 - 2
obs/window-basic-main.cpp

@@ -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);
 }

+ 1 - 0
obs/window-basic-main.hpp

@@ -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;