From dc36f6f4208ee1436b0161bee18d3b449bb708af Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 19 Mar 2015 13:44:48 -0700 Subject: [PATCH] UI: Implement deferred update flag (properties) --- obs/properties-view.cpp | 5 ++++- obs/properties-view.hpp | 4 ++++ obs/window-basic-properties.cpp | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/obs/properties-view.cpp b/obs/properties-view.cpp index db8e74a19..5c9fa8ba4 100644 --- a/obs/properties-view.cpp +++ b/obs/properties-view.cpp @@ -50,6 +50,9 @@ void OBSPropertiesView::ReloadProperties() obs_properties_apply_settings(properties.get(), settings); } + uint32_t flags = obs_properties_get_flags(properties.get()); + deferUpdate = (flags & OBS_PROPERTIES_DEFER_UPDATE) != 0; + RefreshProperties(); } @@ -755,7 +758,7 @@ void WidgetInfo::ControlChanged() return; } - if (view->callback) + if (view->callback && !view->deferUpdate) view->callback(view->obj, view->settings); view->SignalChanged(); diff --git a/obs/properties-view.hpp b/obs/properties-view.hpp index 718fa1467..66a51a03a 100644 --- a/obs/properties-view.hpp +++ b/obs/properties-view.hpp @@ -66,6 +66,7 @@ private: std::vector> children; std::string lastFocused; QWidget *lastWidget = nullptr; + bool deferUpdate; QWidget *NewWidget(obs_property_t *prop, QWidget *widget, const char *signal); @@ -106,4 +107,7 @@ public: int minSize = 0); inline obs_data_t *GetSettings() const {return settings;} + + inline void UpdateSettings() {callback(obj, settings);} + inline bool DeferUpdate() const {return deferUpdate;} }; diff --git a/obs/window-basic-properties.cpp b/obs/window-basic-properties.cpp index 3cca06c9c..a70d29a82 100644 --- a/obs/window-basic-properties.cpp +++ b/obs/window-basic-properties.cpp @@ -117,6 +117,9 @@ void OBSBasicProperties::on_buttonBox_clicked(QAbstractButton *button) if (val == QDialogButtonBox::AcceptRole) { acceptClicked = true; close(); + + if (view->DeferUpdate()) + view->UpdateSettings(); } if (val == QDialogButtonBox::RejectRole) { @@ -260,6 +263,8 @@ bool OBSBasicProperties::ConfirmQuit() switch (button) { case QMessageBox::Save: + if (view->DeferUpdate()) + view->UpdateSettings(); // Do nothing because the settings are already updated break; case QMessageBox::Discard: