diff options
author | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-12-18 16:05:38 +0100 |
---|---|---|
committer | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-12-18 16:05:38 +0100 |
commit | 27675c45d74167b08446e4d36425a1738c8e1609 (patch) | |
tree | ca7aede29cef46852951e4fe85bbebbcc20b122b /src/pa-sink-ctl.c | |
parent | 2d4dcc93891570391a993fa151f0ef02997e2307 (diff) | |
download | pa-sink-ctl-27675c45d74167b08446e4d36425a1738c8e1609.tar.gz pa-sink-ctl-27675c45d74167b08446e4d36425a1738c8e1609.tar.bz2 pa-sink-ctl-27675c45d74167b08446e4d36425a1738c8e1609.zip |
interface: Unify drawing code for sinks and inputs
They are drawn from the same function that calls itself
recursiveley for childs of the currently drawn volume control.
So its called for all sink_inputs that belong to a sink.
Diffstat (limited to 'src/pa-sink-ctl.c')
-rw-r--r-- | src/pa-sink-ctl.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/pa-sink-ctl.c b/src/pa-sink-ctl.c index a95eae9..b22230b 100644 --- a/src/pa-sink-ctl.c +++ b/src/pa-sink-ctl.c @@ -72,6 +72,17 @@ compare_sink_priority(gconstpointer new_data, gconstpointer el_data) } static void +sink_childs_foreach(struct vol_ctl *ctl, GFunc func, gpointer user_data) +{ + struct sink_info *sink = (struct sink_info *) ctl; + struct sink_input_info *input; + + list_foreach(sink->ctx->input_list, input) + if (input->sink == sink->base.index) + func(&input->base, user_data); +} + +static void sink_info_cb(pa_context *c, const pa_sink_info *i, gint is_last, gpointer userdata) { @@ -95,13 +106,14 @@ sink_info_cb(pa_context *c, const pa_sink_info *i, el = g_list_find_custom(ctx->sink_list, &i->index, compare_idx_pntr); if (el == NULL) { - sink = g_new(struct sink_info, 1); + sink = g_new0(struct sink_info, 1); if (sink == NULL) return; sink->base.index = i->index; - sink->base.indent = 0; sink->base.mute_set = pa_context_set_sink_mute_by_index; sink->base.volume_set = pa_context_set_sink_volume_by_index; + sink->base.childs_foreach = sink_childs_foreach; + sink->ctx = ctx; sink->priority = get_sink_priority(ctx, i); ctx->sink_list = g_list_insert_sorted(ctx->sink_list, sink, @@ -143,11 +155,12 @@ sink_input_info_cb(pa_context *c, const pa_sink_input_info *i, el = g_list_find_custom(ctx->input_list, &i->index, compare_idx_pntr); if (el == NULL) { - sink_input = g_new(struct sink_input_info, 1); + sink_input = g_new0(struct sink_input_info, 1); if (sink_input == NULL) return; sink_input->base.index = i->index; sink_input->base.indent = 1; + sink_input->base.hide_index = TRUE; sink_input->base.mute_set = pa_context_set_sink_input_mute; sink_input->base.volume_set = pa_context_set_sink_input_volume; ctx->input_list = g_list_append(ctx->input_list, sink_input); |