From cbcdd0f49c0cdf570d2a4c90f8daf5f229e54bec Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Tue, 20 Apr 2010 19:06:01 +0100 Subject: Split out the creation of the PA context a little. This is a precursor to adding reconnection support. --- src/pavucontrol.cc | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/src/pavucontrol.cc b/src/pavucontrol.cc index 867e523..f65298a 100644 --- a/src/pavucontrol.cc +++ b/src/pavucontrol.cc @@ -42,7 +42,8 @@ #include "rolewidget.h" #include "mainwindow.h" -static pa_context *context = NULL; +static pa_context* context = NULL; +static pa_mainloop_api* api = NULL; static int n_outstanding = 0; void show_error(const char *txt) { @@ -386,6 +387,9 @@ void context_state_callback(pa_context *c, void *userdata) { case PA_CONTEXT_READY: { pa_operation *o; + /* Create event widget immediately so it's first in the list */ + w->createEventRoleWidget(); + pa_context_set_subscribe_callback(c, subscribe_cb, w); if (!(o = pa_context_subscribe(c, (pa_subscription_mask_t) @@ -493,6 +497,25 @@ void context_state_callback(pa_context *c, void *userdata) { } } +static pa_context* create_context(MainWindow* w) { + g_assert(api); + + pa_proplist *proplist = pa_proplist_new(); + pa_proplist_sets(proplist, PA_PROP_APPLICATION_NAME, _("PulseAudio Volume Control")); + pa_proplist_sets(proplist, PA_PROP_APPLICATION_ID, "org.PulseAudio.pavucontrol"); + pa_proplist_sets(proplist, PA_PROP_APPLICATION_ICON_NAME, "audio-card"); + pa_proplist_sets(proplist, PA_PROP_APPLICATION_VERSION, PACKAGE_VERSION); + + pa_context* c = pa_context_new_with_proplist(api, NULL, proplist); + g_assert(c); + + pa_proplist_free(proplist); + + pa_context_set_state_callback(c, context_state_callback, w); + + return c; +} + pa_context* get_context(void) { return context; } @@ -512,27 +535,12 @@ int main(int argc, char *argv[]) { MainWindow* mainWindow = MainWindow::create(); - /* Create event widget immediately so it's first in the list */ - mainWindow->createEventRoleWidget(); - - pa_glib_mainloop *m = pa_glib_mainloop_new(g_main_context_default()); g_assert(m); - pa_mainloop_api *api = pa_glib_mainloop_get_api(m); + api = pa_glib_mainloop_get_api(m); g_assert(api); - pa_proplist *proplist = pa_proplist_new(); - pa_proplist_sets(proplist, PA_PROP_APPLICATION_NAME, _("PulseAudio Volume Control")); - pa_proplist_sets(proplist, PA_PROP_APPLICATION_ID, "org.PulseAudio.pavucontrol"); - pa_proplist_sets(proplist, PA_PROP_APPLICATION_ICON_NAME, "audio-card"); - pa_proplist_sets(proplist, PA_PROP_APPLICATION_VERSION, PACKAGE_VERSION); - - context = pa_context_new_with_proplist(api, NULL, proplist); - g_assert(context); - - pa_proplist_free(proplist); - - pa_context_set_state_callback(context, context_state_callback, mainWindow); + context = create_context(mainWindow); if (pa_context_connect(context, NULL, (pa_context_flags_t) 0, NULL) < 0) goto finish; -- cgit