mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	pulse: emit server change events when default sink/source change
This commit is contained in:
		
							parent
							
								
									b896d65723
								
							
						
					
					
						commit
						bf9b58e1f5
					
				
					 3 changed files with 21 additions and 5 deletions
				
			
		| 
						 | 
					@ -962,7 +962,18 @@ static int metadata_property(void *object,
 | 
				
			||||||
                        const char *value)
 | 
					                        const char *value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct global *global = object;
 | 
						struct global *global = object;
 | 
				
			||||||
	return pa_metadata_update(global, subject, key, type, value);
 | 
						int res;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ((res = pa_metadata_update(global, subject, key, type, value)) < 0)
 | 
				
			||||||
 | 
							return res;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (key) {
 | 
				
			||||||
 | 
							if (strcmp(key, METADATA_DEFAULT_SINK) == 0 ||
 | 
				
			||||||
 | 
							    strcmp(key, METADATA_DEFAULT_SOURCE) == 0) {
 | 
				
			||||||
 | 
								emit_event(global->context, global, PA_SUBSCRIPTION_EVENT_CHANGE);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return res;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct pw_metadata_events metadata_events = {
 | 
					static const struct pw_metadata_events metadata_events = {
 | 
				
			||||||
| 
						 | 
					@ -1144,6 +1155,8 @@ static int set_mask(pa_context *c, struct global *g)
 | 
				
			||||||
		if (c->metadata == NULL) {
 | 
							if (c->metadata == NULL) {
 | 
				
			||||||
			ginfo = &metadata_info;
 | 
								ginfo = &metadata_info;
 | 
				
			||||||
			c->metadata = g;
 | 
								c->metadata = g;
 | 
				
			||||||
 | 
								g->mask = PA_SUBSCRIPTION_MASK_SERVER;
 | 
				
			||||||
 | 
								g->event = PA_SUBSCRIPTION_EVENT_SERVER;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		pw_array_init(&g->metadata_info.metadata, 64);
 | 
							pw_array_init(&g->metadata_info.metadata, 64);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
| 
						 | 
					@ -1630,7 +1643,7 @@ pa_operation* pa_context_set_default_sink(pa_context *c, const char *name, pa_co
 | 
				
			||||||
	d = o->userdata;
 | 
						d = o->userdata;
 | 
				
			||||||
	d->mask = PA_SUBSCRIPTION_MASK_SINK;
 | 
						d->mask = PA_SUBSCRIPTION_MASK_SINK;
 | 
				
			||||||
	d->name = pa_xstrdup(name);
 | 
						d->name = pa_xstrdup(name);
 | 
				
			||||||
	d->key = "http://pipewire.org/metadata/default-audio-sink",
 | 
						d->key = METADATA_DEFAULT_SINK;
 | 
				
			||||||
	d->cb = cb;
 | 
						d->cb = cb;
 | 
				
			||||||
	d->userdata = userdata;
 | 
						d->userdata = userdata;
 | 
				
			||||||
	pa_operation_sync(o);
 | 
						pa_operation_sync(o);
 | 
				
			||||||
| 
						 | 
					@ -1650,7 +1663,7 @@ pa_operation* pa_context_set_default_source(pa_context *c, const char *name, pa_
 | 
				
			||||||
	d = o->userdata;
 | 
						d = o->userdata;
 | 
				
			||||||
	d->mask = PA_SUBSCRIPTION_MASK_SOURCE;
 | 
						d->mask = PA_SUBSCRIPTION_MASK_SOURCE;
 | 
				
			||||||
	d->name = pa_xstrdup(name);
 | 
						d->name = pa_xstrdup(name);
 | 
				
			||||||
	d->key = "http://pipewire.org/metadata/default-audio-source",
 | 
						d->key = METADATA_DEFAULT_SOURCE;
 | 
				
			||||||
	d->cb = cb;
 | 
						d->cb = cb;
 | 
				
			||||||
	d->userdata = userdata;
 | 
						d->userdata = userdata;
 | 
				
			||||||
	pa_operation_sync(o);
 | 
						pa_operation_sync(o);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -480,6 +480,9 @@ pa_operation *pa_operation_new(pa_context *c, pa_stream *s, pa_operation_cb_t cb
 | 
				
			||||||
void pa_operation_done(pa_operation *o);
 | 
					void pa_operation_done(pa_operation *o);
 | 
				
			||||||
int pa_operation_sync(pa_operation *o);
 | 
					int pa_operation_sync(pa_operation *o);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define METADATA_DEFAULT_SINK		"default.audio.sink.name"
 | 
				
			||||||
 | 
					#define METADATA_DEFAULT_SOURCE		"default.audio.source.name"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int pa_metadata_update(struct global *global, uint32_t subject, const char *key,
 | 
					int pa_metadata_update(struct global *global, uint32_t subject, const char *key,
 | 
				
			||||||
                        const char *type, const char *value);
 | 
					                        const char *type, const char *value);
 | 
				
			||||||
int pa_metadata_get(struct global *global, uint32_t subject, const char *key,
 | 
					int pa_metadata_get(struct global *global, uint32_t subject, const char *key,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1264,9 +1264,9 @@ static const char *get_default_name(pa_context *c, uint32_t mask)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (c->metadata) {
 | 
						if (c->metadata) {
 | 
				
			||||||
		if (mask & PA_SUBSCRIPTION_MASK_SINK)
 | 
							if (mask & PA_SUBSCRIPTION_MASK_SINK)
 | 
				
			||||||
			key = "http://pipewire.org/metadata/default-audio-sink";
 | 
								key = METADATA_DEFAULT_SINK;
 | 
				
			||||||
		else if (mask & PA_SUBSCRIPTION_MASK_SOURCE)
 | 
							else if (mask & PA_SUBSCRIPTION_MASK_SOURCE)
 | 
				
			||||||
			key = "http://pipewire.org/metadata/default-audio-source";
 | 
								key = METADATA_DEFAULT_SOURCE;
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			return NULL;
 | 
								return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue