xref: /third_party/pulseaudio/src/tests/gtk-test.c (revision 53a5a1b3)
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
30pa_context *ctxt;
31pa_glib_mainloop *m;
32
33static void context_state_callback(pa_context *c, void *userdata);
34
35static 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
47static 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
59int 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