From 9f15fbe47c9f97a97b6bc24e2f00bc7f7561ebb5 Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Wed, 30 Oct 2024 12:15:52 +0100 Subject: [PATCH] Recursively search for source button in property groups --- .../base/utils/source-properties-button.cpp | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/plugins/base/utils/source-properties-button.cpp b/plugins/base/utils/source-properties-button.cpp index 649fe66a..9033242f 100644 --- a/plugins/base/utils/source-properties-button.cpp +++ b/plugins/base/utils/source-properties-button.cpp @@ -29,20 +29,37 @@ std::string SourceSettingButton::ToString() const return "[" + id + "] " + description; } -std::vector GetSourceButtons(OBSWeakSource source) +static void getSourceButtonsHelper(obs_properties_t *sourceProperties, + std::vector &buttons) { - OBSSourceAutoRelease s = obs_weak_source_get_source(source); - std::vector buttons; - obs_properties_t *sourceProperties = obs_source_properties(s); auto it = obs_properties_first(sourceProperties); do { - if (!it || obs_property_get_type(it) != OBS_PROPERTY_BUTTON) { + if (!it) { + continue; + } + + auto type = obs_property_get_type(it); + if (type == OBS_PROPERTY_GROUP) { + auto group = obs_property_group_content(it); + getSourceButtonsHelper(group, buttons); + continue; + } + + if (obs_property_get_type(it) != OBS_PROPERTY_BUTTON) { continue; } SourceSettingButton button = {obs_property_name(it), obs_property_description(it)}; buttons.emplace_back(button); } while (obs_property_next(&it)); +} + +std::vector GetSourceButtons(OBSWeakSource source) +{ + OBSSourceAutoRelease s = obs_weak_source_get_source(source); + std::vector buttons; + auto sourceProperties = obs_source_properties(s); + getSourceButtonsHelper(sourceProperties, buttons); obs_properties_destroy(sourceProperties); return buttons; }