Added a test program which runs two ChimaraGlk widgets side by side in the same progr...
[projects/chimara/chimara.git] / tests / test-multisession.c
1 /* Program for testing multisessionality, i.e. whether two ChimaraGlk widgets
2  can run in the same application. */
3
4 #include <glib.h>
5 #include <gtk/gtk.h>
6 #include <libchimara/chimara-glk.h>
7
8 static void
9 on_started(ChimaraGlk *glk, const gchar *data)
10 {
11     g_printerr("%s started!\n", data);
12 }
13
14 static void
15 on_stopped(ChimaraGlk *glk, const gchar *data)
16 {
17     g_printerr("%s stopped!\n", data);
18 }
19
20 int
21 main(int argc, char **argv)
22 {
23         if( !g_thread_supported() )
24                 g_thread_init(NULL);
25
26         gdk_threads_init();
27     
28         gtk_set_locale();
29         gtk_init(&argc, &argv);
30
31         GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
32         gtk_widget_set_size_request(window, 800, 500);
33         
34         GtkWidget *hpaned = gtk_hpaned_new();
35         gtk_paned_set_position(GTK_PANED(hpaned), 400);
36         
37         GtkWidget *frotz = chimara_glk_new();
38         chimara_glk_set_default_font_string(CHIMARA_GLK(frotz), "Lucida Sans Unicode 12");
39         chimara_glk_set_monospace_font_string(CHIMARA_GLK(frotz), "Lucida Console 12");
40         g_signal_connect(frotz, "started", G_CALLBACK(on_started), "Frotz");
41         g_signal_connect(frotz, "stopped", G_CALLBACK(on_stopped), "Frotz");
42         
43         GtkWidget *nitfol = chimara_glk_new();
44         chimara_glk_set_default_font_string(CHIMARA_GLK(nitfol), "Bitstream Charter 12");
45         chimara_glk_set_monospace_font_string(CHIMARA_GLK(nitfol), "Luxi Mono 12");
46         g_signal_connect(nitfol, "started", G_CALLBACK(on_started), "Nitfol");
47         g_signal_connect(nitfol, "stopped", G_CALLBACK(on_stopped), "Nitfol");
48
49         gtk_paned_pack1(GTK_PANED(hpaned), frotz, TRUE, TRUE);
50         gtk_paned_pack2(GTK_PANED(hpaned), nitfol, TRUE, TRUE);
51         gtk_container_add(GTK_CONTAINER(window), hpaned);
52
53         gtk_widget_show_all(window);
54
55         if(!chimara_glk_run(CHIMARA_GLK(frotz), "../interpreters/frotz/.libs/frotz.so", argc, argv, NULL))
56                 return 1;
57         if(!chimara_glk_run(CHIMARA_GLK(nitfol), "../interpreters/nitfol/.libs/nitfol.so", argc, argv, NULL))
58                 return 1;
59
60     gdk_threads_enter();
61         gtk_main();
62         gdk_threads_leave();
63
64         chimara_glk_stop(CHIMARA_GLK(frotz));
65         chimara_glk_stop(CHIMARA_GLK(nitfol));
66
67         return 0;
68 }
69         
70