Sfoglia il codice sorgente

libobs: Add "source_update" signal

Adds a source signal that gets triggered when a source's settings are
updated.
gxalpha 3 anni fa
parent
commit
5658bf6732

+ 4 - 0
docs/sphinx/reference-core.rst

@@ -590,6 +590,10 @@ Core OBS Signals
    Called when a source has been removed (:c:func:`obs_source_remove()`
    Called when a source has been removed (:c:func:`obs_source_remove()`
    has been called on the source).
    has been called on the source).
 
 
+**source_update** (ptr source)
+
+   Called when a source's settings have been updated.
+
 **source_save** (ptr source)
 **source_save** (ptr source)
 
 
    Called when a source is being saved.
    Called when a source is being saved.

+ 4 - 0
docs/sphinx/reference-sources.rst

@@ -531,6 +531,10 @@ Source Signals
    Called when the :c:func:`obs_source_remove()` function is called on
    Called when the :c:func:`obs_source_remove()` function is called on
    the source.
    the source.
 
 
+**update** (ptr source)
+
+   Called when the source's settings have been updated.
+
 **save** (ptr source)
 **save** (ptr source)
 
 
    Called when the source is being saved.
    Called when the source is being saved.

+ 3 - 0
libobs/obs-source.c

@@ -77,6 +77,7 @@ struct obs_source_info *get_source_info2(const char *unversioned_id,
 static const char *source_signals[] = {
 static const char *source_signals[] = {
 	"void destroy(ptr source)",
 	"void destroy(ptr source)",
 	"void remove(ptr source)",
 	"void remove(ptr source)",
+	"void update(ptr source)",
 	"void save(ptr source)",
 	"void save(ptr source)",
 	"void load(ptr source)",
 	"void load(ptr source)",
 	"void activate(ptr source)",
 	"void activate(ptr source)",
@@ -968,6 +969,7 @@ static void obs_source_deferred_update(obs_source_t *source)
 				    source->context.settings);
 				    source->context.settings);
 		os_atomic_compare_swap_long(&source->defer_update_count, count,
 		os_atomic_compare_swap_long(&source->defer_update_count, count,
 					    0);
 					    0);
+		obs_source_dosignal(source, "source_update", "update");
 	}
 	}
 }
 }
 
 
@@ -985,6 +987,7 @@ void obs_source_update(obs_source_t *source, obs_data_t *settings)
 	} else if (source->context.data && source->info.update) {
 	} else if (source->context.data && source->info.update) {
 		source->info.update(source->context.data,
 		source->info.update(source->context.data,
 				    source->context.settings);
 				    source->context.settings);
+		obs_source_dosignal(source, "source_update", "update");
 	}
 	}
 }
 }
 
 

+ 1 - 0
libobs/obs.c

@@ -970,6 +970,7 @@ static const char *obs_signals[] = {
 	"void source_create(ptr source)",
 	"void source_create(ptr source)",
 	"void source_destroy(ptr source)",
 	"void source_destroy(ptr source)",
 	"void source_remove(ptr source)",
 	"void source_remove(ptr source)",
+	"void source_update(ptr source)",
 	"void source_save(ptr source)",
 	"void source_save(ptr source)",
 	"void source_load(ptr source)",
 	"void source_load(ptr source)",
 	"void source_activate(ptr source)",
 	"void source_activate(ptr source)",