1 /***
2 This file is part of PulseAudio.
3
4 PulseAudio is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published
6 by the Free Software Foundation; either version 2.1 of the License,
7 or (at your option) any later version.
8
9 PulseAudio is distributed in the hope that it will be useful, but
10 WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public License
15 along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
16 ***/
17
18 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
19
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #include <gtk/gtk.h>
25 #include <glib.h>
26
27 #include <pulse/context.h>
28 #include <pulse/glib-mainloop.h>
29
30 pa_context *ctxt;
31 pa_glib_mainloop *m;
32
33 static void context_state_callback(pa_context *c, void *userdata);
34
connect(void)35 static void connect(void) {
36 int r;
37
38 ctxt = pa_context_new(pa_glib_mainloop_get_api(m), NULL);
39 g_assert(ctxt);
40
41 r = pa_context_connect(ctxt, NULL, PA_CONTEXT_NOAUTOSPAWN|PA_CONTEXT_NOFAIL, NULL);
42 g_assert(r == 0);
43
44 pa_context_set_state_callback(ctxt, context_state_callback, NULL);
45 }
46
context_state_callback(pa_context * c,void * userdata)47 static void context_state_callback(pa_context *c, void *userdata) {
48 switch (pa_context_get_state(c)) {
49 case PA_CONTEXT_FAILED:
50 pa_context_unref(ctxt);
51 ctxt = NULL;
52 connect();
53 break;
54 default:
55 break;
56 }
57 }
58
main(int argc,char * argv[])59 int main(int argc, char *argv[]) {
60
61 GtkWidget *window;
62
63 gtk_init(&argc, &argv);
64
65 g_set_application_name("This is a test");
66 gtk_window_set_default_icon_name("foobar");
67 g_setenv("PULSE_PROP_media.role", "phone", TRUE);
68
69 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
70 gtk_window_set_title(GTK_WINDOW (window), g_get_application_name());
71 gtk_widget_show_all(window);
72
73 m = pa_glib_mainloop_new(NULL);
74 g_assert(m);
75
76 connect();
77 gtk_main();
78
79 pa_context_unref(ctxt);
80 pa_glib_mainloop_free(m);
81
82 return 0;
83 }
84