summaryrefslogtreecommitdiff
path: root/src/pa-sink-ctl.c
diff options
context:
space:
mode:
authorBenjamin Franzke <benjaminfranzke@googlemail.com>2011-12-18 16:05:38 +0100
committerBenjamin Franzke <benjaminfranzke@googlemail.com>2011-12-18 16:05:38 +0100
commit27675c45d74167b08446e4d36425a1738c8e1609 (patch)
treeca7aede29cef46852951e4fe85bbebbcc20b122b /src/pa-sink-ctl.c
parent2d4dcc93891570391a993fa151f0ef02997e2307 (diff)
downloadpa-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.c19
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);