Bläddra i källkod

libobs: Add obs_property_set_modified_callback2

Allows the ability to pass private data to a callback (useful
specifically for scripting purposes).
jp9000 7 år sedan
förälder
incheckning
fd9e5d45a3
2 ändrade filer med 23 tillägg och 2 borttagningar
  1. 19 2
      libobs/obs-properties.c
  2. 4 0
      libobs/obs-properties.h

+ 19 - 2
libobs/obs-properties.c

@@ -154,6 +154,7 @@ struct obs_property {
 	struct obs_properties   *parent;
 
 	obs_property_modified_t modified;
+	obs_property_modified2_t modified2;
 
 	struct obs_property     *next;
 };
@@ -281,6 +282,8 @@ void obs_properties_apply_settings(obs_properties_t *props, obs_data_t *settings
 	while (p) {
 		if (p->modified)
 			p->modified(props, p, settings);
+		else if (p->modified2)
+			p->modified2(p->priv, props, p, settings);
 		p = p->next;
 	}
 }
@@ -589,10 +592,24 @@ void obs_property_set_modified_callback(obs_property_t *p,
 	if (p) p->modified = modified;
 }
 
+void obs_property_set_modified_callback2(obs_property_t *p,
+		obs_property_modified2_t modified2, void *priv)
+{
+	if (p) {
+		p->modified2 = modified2;
+		p->priv = priv;
+	}
+}
+
 bool obs_property_modified(obs_property_t *p, obs_data_t *settings)
 {
-	if (p && p->modified)
-		return p->modified(p->parent, p, settings);
+	if (p) {
+		if (p->modified) {
+			return p->modified(p->parent, p, settings);
+		} else if (p->modified2) {
+			return p->modified2(p->priv, p->parent, p, settings);
+		}
+	}
 	return false;
 }
 

+ 4 - 0
libobs/obs-properties.h

@@ -227,9 +227,13 @@ EXPORT obs_property_t *obs_properties_add_frame_rate(obs_properties_t *props,
  */
 typedef bool (*obs_property_modified_t)(obs_properties_t *props,
 		obs_property_t *property, obs_data_t *settings);
+typedef bool (*obs_property_modified2_t)(void *priv, obs_properties_t *props,
+		obs_property_t *property, obs_data_t *settings);
 
 EXPORT void obs_property_set_modified_callback(obs_property_t *p,
 		obs_property_modified_t modified);
+EXPORT void obs_property_set_modified_callback2(obs_property_t *p,
+		obs_property_modified2_t modified, void *priv);
 
 EXPORT bool obs_property_modified(obs_property_t *p, obs_data_t *settings);
 EXPORT bool obs_property_button_clicked(obs_property_t *p, void *obj);