Browse Source

UI: Update adv audio props on monitoring type change

Update the audio monitoring combo box when it is changed via libobs.
Required to make obs-websocket requests work well
tt2468 4 years ago
parent
commit
33b75a1a78
2 changed files with 25 additions and 0 deletions
  1. 21 0
      UI/adv-audio-control.cpp
  2. 4 0
      UI/adv-audio-control.hpp

+ 21 - 0
UI/adv-audio-control.cpp

@@ -60,6 +60,10 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 				 this);
 	flagsSignal.Connect(handler, "update_flags", OBSSourceFlagsChanged,
 			    this);
+	if (obs_audio_monitoring_supported())
+		monitoringTypeSignal.Connect(handler, "audio_monitoring",
+					     OBSSourceMonitoringTypeChanged,
+					     this);
 	mixersSignal.Connect(handler, "audio_mixers", OBSSourceMixersChanged,
 			     this);
 
@@ -330,6 +334,15 @@ void OBSAdvAudioCtrl::OBSSourceSyncChanged(void *param, calldata_t *calldata)
 				  "SourceSyncChanged", Q_ARG(int64_t, offset));
 }
 
+void OBSAdvAudioCtrl::OBSSourceMonitoringTypeChanged(void *param,
+						     calldata_t *calldata)
+{
+	int type = calldata_int(calldata, "type");
+	QMetaObject::invokeMethod(reinterpret_cast<OBSAdvAudioCtrl *>(param),
+				  "SourceMonitoringTypeChanged",
+				  Q_ARG(int, type));
+}
+
 void OBSAdvAudioCtrl::OBSSourceMixersChanged(void *param, calldata_t *calldata)
 {
 	uint32_t mixers = (uint32_t)calldata_int(calldata, "mixers");
@@ -382,6 +395,14 @@ void OBSAdvAudioCtrl::SourceSyncChanged(int64_t offset)
 	syncOffset->blockSignals(false);
 }
 
+void OBSAdvAudioCtrl::SourceMonitoringTypeChanged(int type)
+{
+	int idx = monitoringType->findData(type);
+	monitoringType->blockSignals(true);
+	monitoringType->setCurrentIndex(idx);
+	monitoringType->blockSignals(false);
+}
+
 void OBSAdvAudioCtrl::SourceMixersChanged(uint32_t mixers)
 {
 	setCheckboxState(mixer1, mixers & (1 << 0));

+ 4 - 0
UI/adv-audio-control.hpp

@@ -51,6 +51,7 @@ private:
 	OBSSignal volChangedSignal;
 	OBSSignal syncOffsetSignal;
 	OBSSignal flagsSignal;
+	OBSSignal monitoringTypeSignal;
 	OBSSignal mixersSignal;
 	OBSSignal activateSignal;
 	OBSSignal deactivateSignal;
@@ -60,6 +61,8 @@ private:
 	static void OBSSourceFlagsChanged(void *param, calldata_t *calldata);
 	static void OBSSourceVolumeChanged(void *param, calldata_t *calldata);
 	static void OBSSourceSyncChanged(void *param, calldata_t *calldata);
+	static void OBSSourceMonitoringTypeChanged(void *param,
+						   calldata_t *calldata);
 	static void OBSSourceMixersChanged(void *param, calldata_t *calldata);
 
 public:
@@ -77,6 +80,7 @@ public slots:
 	void SourceFlagsChanged(uint32_t flags);
 	void SourceVolumeChanged(float volume);
 	void SourceSyncChanged(int64_t offset);
+	void SourceMonitoringTypeChanged(int type);
 	void SourceMixersChanged(uint32_t mixers);
 
 	void volumeChanged(double db);