diff options
| author | Lennart Poettering <lennart@poettering.net> | 2009-01-21 02:46:36 +0100 | 
|---|---|---|
| committer | Lennart Poettering <lennart@poettering.net> | 2009-01-21 02:46:36 +0100 | 
| commit | 9661cd04442e88fa500654a4b7ccea68ede2e123 (patch) | |
| tree | 4858b4548cb02a7f223797b0d3bb2d58a04fa661 /src | |
| parent | e8f93b125e0e0776024ae78a2bdd33daf4442326 (diff) | |
make pa_card_new_data::active_profile a string
Diffstat (limited to 'src')
| -rw-r--r-- | src/pulsecore/card.c | 34 | ||||
| -rw-r--r-- | src/pulsecore/card.h | 3 | 
2 files changed, 26 insertions, 11 deletions
| diff --git a/src/pulsecore/card.c b/src/pulsecore/card.c index af2a178b..397c6d7a 100644 --- a/src/pulsecore/card.c +++ b/src/pulsecore/card.c @@ -76,6 +76,13 @@ void pa_card_new_data_set_name(pa_card_new_data *data, const char *name) {      data->name = pa_xstrdup(name);  } +void pa_card_new_data_set_profile(pa_card_new_data *data, const char *profile) { +    pa_assert(data); + +    pa_xfree(data->active_profile); +    data->active_profile = pa_xstrdup(profile); +} +  void pa_card_new_data_done(pa_card_new_data *data) {      pa_assert(data); @@ -92,6 +99,7 @@ void pa_card_new_data_done(pa_card_new_data *data) {      }      pa_xfree(data->name); +    pa_xfree(data->active_profile);  }  pa_card *pa_card_new(pa_core *core, pa_card_new_data *data) { @@ -126,21 +134,27 @@ pa_card *pa_card_new(pa_core *core, pa_card_new_data *data) {      c->sinks = pa_idxset_new(NULL, NULL);      c->sources = pa_idxset_new(NULL, NULL); +    /* As a minor optimization we just steal the list instead of +     * copying it here */      c->profiles = data->profiles;      data->profiles = NULL; -    if (!(c->active_profile = data->active_profile)) -        if (c->profiles) { -            void *state = NULL; -            pa_card_profile *p; -            while ((p = pa_hashmap_iterate(c->profiles, &state, NULL))) { -                if (!c->active_profile || -                    p->priority > c->active_profile->priority) +    c->active_profile = NULL; -                    c->active_profile = p; -            } +    if (data->active_profile && c->profiles) +        c->active_profile = pa_hashmap_get(c->profiles, data->active_profile); + +    if (!c->active_profile && c->profiles) { +        void *state = NULL; +        pa_card_profile *p; + +        while ((p = pa_hashmap_iterate(c->profiles, &state, NULL))) { +            if (!c->active_profile || +                p->priority > c->active_profile->priority) + +                c->active_profile = p;          } -    data->active_profile = NULL; +    }      c->userdata = NULL;      c->set_profile = NULL; diff --git a/src/pulsecore/card.h b/src/pulsecore/card.h index 17733c51..9aa8f374 100644 --- a/src/pulsecore/card.h +++ b/src/pulsecore/card.h @@ -77,7 +77,7 @@ typedef struct pa_card_new_data {      pa_module *module;      pa_hashmap *profiles; -    pa_card_profile *active_profile; +    char *active_profile;      pa_bool_t namereg_fail:1;  } pa_card_new_data; @@ -87,6 +87,7 @@ void pa_card_profile_free(pa_card_profile *c);  pa_card_new_data *pa_card_new_data_init(pa_card_new_data *data);  void pa_card_new_data_set_name(pa_card_new_data *data, const char *name); +void pa_card_new_data_set_profile(pa_card_new_data *data, const char *profile);  void pa_card_new_data_done(pa_card_new_data *data);  pa_card *pa_card_new(pa_core *c, pa_card_new_data *data); | 
