Browse Source

UI: Watch for refresh signal in source list

jp9000 5 years ago
parent
commit
7c9d227f1e
3 changed files with 24 additions and 0 deletions
  1. 1 0
      UI/source-tree.hpp
  2. 21 0
      UI/window-basic-main.cpp
  3. 2 0
      UI/window-basic-main.hpp

+ 1 - 0
UI/source-tree.hpp

@@ -184,6 +184,7 @@ public:
 
 public slots:
 	inline void ReorderItems() { GetStm()->ReorderItems(); }
+	inline void RefreshItems() { GetStm()->SceneChanged(); }
 	void Remove(OBSSceneItem item);
 	void GroupSelectedItems();
 	void UngroupSelectedGroups();

+ 21 - 0
UI/window-basic-main.cpp

@@ -2541,6 +2541,8 @@ void OBSBasic::AddScene(OBSSource source)
 					    this),
 		std::make_shared<OBSSignal>(handler, "reorder",
 					    OBSBasic::SceneReordered, this),
+		std::make_shared<OBSSignal>(handler, "refresh",
+					    OBSBasic::SceneRefreshed, this),
 	});
 
 	item->setData(static_cast<int>(QtDataRole::OBSSignals),
@@ -3240,6 +3242,15 @@ void OBSBasic::ReorderSources(OBSScene scene)
 	SaveProject();
 }
 
+void OBSBasic::RefreshSources(OBSScene scene)
+{
+	if (scene != GetCurrentScene() || ui->sources->IgnoreReorder())
+		return;
+
+	ui->sources->RefreshItems();
+	SaveProject();
+}
+
 /* OBS Callbacks */
 
 void OBSBasic::SceneReordered(void *data, calldata_t *params)
@@ -3252,6 +3263,16 @@ void OBSBasic::SceneReordered(void *data, calldata_t *params)
 				  Q_ARG(OBSScene, OBSScene(scene)));
 }
 
+void OBSBasic::SceneRefreshed(void *data, calldata_t *params)
+{
+	OBSBasic *window = static_cast<OBSBasic *>(data);
+
+	obs_scene_t *scene = (obs_scene_t *)calldata_ptr(params, "scene");
+
+	QMetaObject::invokeMethod(window, "RefreshSources",
+				  Q_ARG(OBSScene, OBSScene(scene)));
+}
+
 void OBSBasic::SceneItemAdded(void *data, calldata_t *params)
 {
 	OBSBasic *window = static_cast<OBSBasic *>(data);

+ 2 - 0
UI/window-basic-main.hpp

@@ -580,6 +580,7 @@ private slots:
 	void ToggleAlwaysOnTop();
 
 	void ReorderSources(OBSScene scene);
+	void RefreshSources(OBSScene scene);
 
 	void ProcessHotkey(obs_hotkey_id id, bool pressed);
 
@@ -661,6 +662,7 @@ private slots:
 private:
 	/* OBS Callbacks */
 	static void SceneReordered(void *data, calldata_t *params);
+	static void SceneRefreshed(void *data, calldata_t *params);
 	static void SceneItemAdded(void *data, calldata_t *params);
 	static void SceneItemSelected(void *data, calldata_t *params);
 	static void SceneItemDeselected(void *data, calldata_t *params);