Skip to content

Commit f53c843

Browse files
Warchamp7RytoEX
authored andcommitted
frontend: Update previewed sources in mixer by visibility
1 parent 8436141 commit f53c843

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

frontend/widgets/AudioMixer.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ AudioMixer::AudioMixer(QWidget *parent) : QFrame(parent)
260260

261261
updateShowToolbar();
262262
updatePreviewSources();
263+
updatePreviewHandlers();
263264
updateGlobalSources();
264265

265266
reloadVolumeControls();
@@ -413,6 +414,10 @@ void AudioMixer::updatePreviewSources()
413414
}
414415

415416
auto getPreviewSources = [this](obs_scene_t *, obs_sceneitem_t *item) {
417+
if (!obs_sceneitem_visible(item)) {
418+
return true;
419+
}
420+
416421
obs_source_t *source = obs_sceneitem_get_source(item);
417422
if (!source) {
418423
return true;
@@ -882,6 +887,7 @@ void AudioMixer::handleFrontendEvent(obs_frontend_event event)
882887
case OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED:
883888
case OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED:
884889
updatePreviewSources();
890+
updatePreviewHandlers();
885891
queueLayoutUpdate();
886892
break;
887893
case OBS_FRONTEND_EVENT_EXIT:
@@ -892,6 +898,24 @@ void AudioMixer::handleFrontendEvent(obs_frontend_event event)
892898
}
893899
}
894900

901+
void AudioMixer::updatePreviewHandlers()
902+
{
903+
previewSignals.clear();
904+
905+
bool isStudioMode = obs_frontend_preview_program_mode_active();
906+
if (isStudioMode) {
907+
OBSSourceAutoRelease previewSource = obs_frontend_get_current_preview_scene();
908+
if (!previewSource) {
909+
return;
910+
}
911+
912+
previewSignals.reserve(1);
913+
914+
previewSignals.emplace_back(obs_source_get_signal_handler(previewSource), "item_visible",
915+
AudioMixer::obsSceneItemVisibleChange, this);
916+
}
917+
}
918+
895919
void AudioMixer::updateShowInactive()
896920
{
897921
bool settingShowInactive = config_get_bool(App()->GetUserConfig(), "BasicWindow", "MixerShowInactive");
@@ -1029,3 +1053,27 @@ void AudioMixer::obsSourceRename(void *data, calldata_t *)
10291053
{
10301054
QMetaObject::invokeMethod(static_cast<AudioMixer *>(data), "queueLayoutUpdate", Qt::QueuedConnection);
10311055
}
1056+
1057+
void AudioMixer::obsSceneItemVisibleChange(void *data, calldata_t *params)
1058+
{
1059+
obs_sceneitem_t *sceneItem = static_cast<obs_sceneitem_t *>(calldata_ptr(params, "item"));
1060+
if (!sceneItem) {
1061+
return;
1062+
}
1063+
1064+
obs_source_t *source = obs_sceneitem_get_source(sceneItem);
1065+
if (!source) {
1066+
return;
1067+
}
1068+
1069+
uint32_t flags = obs_source_get_output_flags(source);
1070+
1071+
if (flags & OBS_SOURCE_AUDIO) {
1072+
QMetaObject::invokeMethod(static_cast<AudioMixer *>(data), "updatePreviewSources",
1073+
Qt::QueuedConnection);
1074+
1075+
auto uuidPointer = obs_source_get_uuid(source);
1076+
QMetaObject::invokeMethod(static_cast<AudioMixer *>(data), "updateControlVisibility",
1077+
Qt::QueuedConnection, Q_ARG(QString, QString::fromUtf8(uuidPointer)));
1078+
}
1079+
}

frontend/widgets/AudioMixer.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,10 @@ class AudioMixer : public QFrame {
5656

5757
private:
5858
std::vector<OBSSignal> signalHandlers;
59+
std::vector<OBSSignal> previewSignals;
5960
static void onFrontendEvent(enum obs_frontend_event event, void *data);
6061
void handleFrontendEvent(enum obs_frontend_event event);
62+
void updatePreviewHandlers();
6163

6264
std::unordered_map<QString, QPointer<VolumeControl>> volumeList;
6365
void addControlForUuid(QString uuid);
@@ -124,6 +126,7 @@ class AudioMixer : public QFrame {
124126
static void obsSourceCreate(void *data, calldata_t *params);
125127
static void obsSourceRemove(void *data, calldata_t *params);
126128
static void obsSourceRename(void *data, calldata_t *params);
129+
static void obsSceneItemVisibleChange(void *data, calldata_t *params);
127130

128131
private slots:
129132
void sourceCreated(QString uuid);

0 commit comments

Comments
 (0)