summaryrefslogtreecommitdiff
path: root/src/pa-sink-ctl.c
diff options
context:
space:
mode:
authorben <benjaminfranzke@googlemail.com>2010-07-15 00:10:48 +0200
committerben <benjaminfranzke@googlemail.com>2010-07-15 00:12:49 +0200
commit25edb3357129ebb184fe24de18b8b73e8f35b6fc (patch)
tree06c084347f488f056fe097c65fc211dfd017fa4b /src/pa-sink-ctl.c
parent9ab2dc0b904c5b684c7b408c479253cb51de52de (diff)
downloadpa-sink-ctl-25edb3357129ebb184fe24de18b8b73e8f35b6fc.tar.gz
pa-sink-ctl-25edb3357129ebb184fe24de18b8b73e8f35b6fc.tar.bz2
pa-sink-ctl-25edb3357129ebb184fe24de18b8b73e8f35b6fc.zip
replace own sink-list implementation with GArray
Diffstat (limited to 'src/pa-sink-ctl.c')
-rw-r--r--src/pa-sink-ctl.c56
1 files changed, 26 insertions, 30 deletions
diff --git a/src/pa-sink-ctl.c b/src/pa-sink-ctl.c
index 44a6fcc..9dd0610 100644
--- a/src/pa-sink-ctl.c
+++ b/src/pa-sink-ctl.c
@@ -20,28 +20,18 @@
#define WIDTH 80
#define HEIGHT 10
-sink_info** sink_list = NULL;
-uint32_t sink_counter;
-uint32_t sink_max;
+GArray *sink_list = NULL;
pa_mainloop_api *mainloop_api = NULL;
pa_context *context = NULL;
-// ncurses
-WINDOW *menu_win;
-int chooser;
-int startx;
-int starty;
-
int main(int argc, char** argv)
{
GMainContext *g_context = NULL;
GMainLoop *g_loop = NULL;
pa_glib_mainloop *m = NULL;
- sink_counter = 0;
- sink_max = 1;
- sink_list = sink_list_init(sink_max);
+ sink_list_alloc(&sink_list);
interface_init();
@@ -119,17 +109,20 @@ void get_sink_info_callback(pa_context *c, const pa_sink_info *i, int is_last, v
return;
}
- sink_list_check(&sink_list, &sink_max, sink_counter);
- sink_check(&(sink_list[sink_counter]));
- sink_list[sink_counter]->index = i->index;
- sink_list[sink_counter]->mute = i->mute;
- sink_list[sink_counter]->vol = pa_cvolume_avg(&i->volume);
- sink_list[sink_counter]->channels = i->volume.channels;
- sink_list[sink_counter]->name = strdup(i->name);
- const char *tmp = pa_proplist_gets(i->proplist, "device.product.name");
- sink_list[sink_counter]->device = (tmp == NULL) ? NULL : strdup(tmp);
-
- ++sink_counter;
+ g_array_append_val(sink_list, ((sink_info) {
+ .index = i->index,
+ .mute = i->mute,
+ .vol = pa_cvolume_avg(&i->volume),
+ .channels = i->volume.channels,
+ .name = strdup(i->name),
+ .device = pa_proplist_contains(i->proplist, "device.product.name") ?
+ strdup(pa_proplist_gets(i->proplist, "device.product.name")) : NULL,
+
+ .input_counter = 0,
+ .input_max = 1,
+ .input_list = sink_input_list_init(1)
+
+ }));
}
/*
@@ -155,23 +148,25 @@ void get_sink_input_info_callback(pa_context *c, const pa_sink_input_info *i, in
snprintf(k, sizeof(k), "%u", i->client);
int sink_num = i->sink;
- int counter = sink_list[sink_num]->input_counter;
+ int counter = g_array_index(sink_list, sink_info, sink_num).input_counter;
// check the length of the list
- sink_check_input_list(sink_list[sink_num]);
+ sink_check_input_list(&g_array_index(sink_list, sink_info, sink_num));
+
// check the current element of the list
- sink_input_check(&(sink_list[ sink_num ]->input_list[ counter ]));
- sink_input_info* input = sink_list[sink_num]->input_list[counter];
+ sink_input_check(&(g_array_index(sink_list, sink_info, sink_num).input_list[counter]));
+
+ sink_input_info* input = g_array_index(sink_list, sink_info, sink_num).input_list[counter];
input->name = strdup(pa_proplist_gets(i->proplist, "application.name"));
input->index = i->index;
input->channels = i->volume.channels;
input->vol = pa_cvolume_avg(&i->volume);
input->mute = i->mute;
- ++(sink_list[sink_num]->input_counter);
+ ++(g_array_index(sink_list, sink_info, sink_num).input_counter);
}
void quit(void) {
- sink_list_clear(sink_list, &sink_max, &sink_counter);
+ sink_list_free(sink_list);
interface_clear();
exit(0);
}
@@ -186,6 +181,7 @@ void change_callback(pa_context* c, int success, void* userdate) {
}
void collect_all_info(void) {
- sink_list_reset(sink_list, &sink_counter);
+ sink_list_free(sink_list);
+ sink_list_alloc(&sink_list);
pa_operation_unref(pa_context_get_sink_info_list(context, get_sink_info_callback, NULL));
}