diff --git a/obs/properties-view.cpp b/obs/properties-view.cpp index da6c4293b..cfb8082ee 100644 --- a/obs/properties-view.cpp +++ b/obs/properties-view.cpp @@ -40,6 +40,12 @@ static inline long long color_to_int(QColor color) shift(color.alpha(), 24); } +void OBSPropertiesView::ReloadProperties() +{ + properties.reset(reloadCallback(obj)); + RefreshProperties(); +} + void OBSPropertiesView::RefreshProperties() { children.clear(); @@ -76,20 +82,21 @@ void OBSPropertiesView::RefreshProperties() } } -OBSPropertiesView::OBSPropertiesView(OBSData settings_, - obs_properties_t *properties_, void *obj_, +OBSPropertiesView::OBSPropertiesView(OBSData settings_, void *obj_, + PropertiesReloadCallback reloadCallback, PropertiesUpdateCallback callback_, int minSize_) - : QScrollArea (nullptr), - widget (nullptr), - properties (properties_, obs_properties_destroy), - settings (settings_), - obj (obj_), - callback (callback_), - minSize (minSize_), - lastWidget (nullptr) + : QScrollArea (nullptr), + widget (nullptr), + properties (nullptr, obs_properties_destroy), + settings (settings_), + obj (obj_), + reloadCallback (reloadCallback), + callback (callback_), + minSize (minSize_), + lastWidget (nullptr) { setFrameShape(QFrame::NoFrame); - RefreshProperties(); + ReloadProperties(); } void OBSPropertiesView::resizeEvent(QResizeEvent *event) diff --git a/obs/properties-view.hpp b/obs/properties-view.hpp index c5e2e013c..04bd6c8cb 100644 --- a/obs/properties-view.hpp +++ b/obs/properties-view.hpp @@ -9,7 +9,9 @@ class QFormLayout; class OBSPropertiesView; class QLabel; -typedef void (*PropertiesUpdateCallback)(void *obj, obs_data_t *settings); +typedef obs_properties_t *(*PropertiesReloadCallback)(void *obj); +typedef void (*PropertiesUpdateCallback)(void *obj, + obs_data_t *settings); /* ------------------------------------------------------------------------- */ @@ -57,6 +59,7 @@ private: properties_t properties; OBSData settings; void *obj; + PropertiesReloadCallback reloadCallback; PropertiesUpdateCallback callback; int minSize; std::vector> children; @@ -81,14 +84,15 @@ private: void resizeEvent(QResizeEvent *event) override; public slots: + void ReloadProperties(); void RefreshProperties(); signals: void PropertiesResized(); public: - OBSPropertiesView(OBSData settings, - obs_properties_t *properties, - void *obj, PropertiesUpdateCallback callback, + OBSPropertiesView(OBSData settings, void *obj, + PropertiesReloadCallback reloadCallback, + PropertiesUpdateCallback callback, int minSize = 0); }; diff --git a/obs/window-basic-properties.cpp b/obs/window-basic-properties.cpp index aa535e26e..a5beaa75e 100644 --- a/obs/window-basic-properties.cpp +++ b/obs/window-basic-properties.cpp @@ -49,8 +49,8 @@ OBSBasicProperties::OBSBasicProperties(QWidget *parent, OBSSource source_) OBSData settings = obs_source_get_settings(source); obs_data_release(settings); - view = new OBSPropertiesView(settings, - obs_source_properties(source), source, + view = new OBSPropertiesView(settings, source, + (PropertiesReloadCallback)obs_source_properties, (PropertiesUpdateCallback)obs_source_update); layout()->addWidget(view); diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp index aeafb39be..77cbd795d 100644 --- a/obs/window-basic-settings.cpp +++ b/obs/window-basic-settings.cpp @@ -239,13 +239,10 @@ void OBSBasicSettings::LoadServiceInfo() QLayout *layout = ui->streamContainer->layout(); obs_service_t *service = main->GetService(); obs_data_t *settings = obs_service_get_settings(service); - obs_properties_t *properties = obs_service_properties(service); delete streamProperties; - streamProperties = new OBSPropertiesView( - settings, - properties, - service, + streamProperties = new OBSPropertiesView(settings, service, + (PropertiesReloadCallback)obs_service_properties, (PropertiesUpdateCallback)obs_service_update, 170);