diff --git a/UI/adv-audio-control.cpp b/UI/adv-audio-control.cpp index cb0e8a61c..edba2cc28 100644 --- a/UI/adv-audio-control.cpp +++ b/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(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)); diff --git a/UI/adv-audio-control.hpp b/UI/adv-audio-control.hpp index 9a7cf07a9..2de04148f 100644 --- a/UI/adv-audio-control.hpp +++ b/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);