]> Pileus Git - ~andy/gtk/blob - demos/gtk-demo/builder.c
e7c31ccab00fd1c66bfcd17397c19583340bb7e4
[~andy/gtk] / demos / gtk-demo / builder.c
1 /* Builder
2  *
3  * Demonstrates an interface loaded from a XML description.
4  */
5
6 #include <gtk/gtk.h>
7
8 static GtkBuilder *builder;
9
10 G_MODULE_EXPORT void
11 quit_activate (GtkAction *action)
12 {
13   GtkWidget *window;
14
15   window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
16   gtk_widget_destroy (window);
17 }
18
19 G_MODULE_EXPORT void
20 about_activate (GtkAction *action)
21 {
22   GtkWidget *about_dlg;
23
24   about_dlg = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1"));
25   gtk_dialog_run (GTK_DIALOG (about_dlg));
26   gtk_widget_hide (about_dlg);
27 }
28
29 G_MODULE_EXPORT void
30 help_activate (GtkAction *action)
31 {
32   g_print ("Help not available\n");
33 }
34
35 GtkWidget *
36 do_builder (GtkWidget *do_widget)
37 {
38   static GtkWidget *window = NULL;
39   GError *err = NULL;
40
41   if (!window)
42     {
43       builder = gtk_builder_new ();
44       gtk_builder_add_from_resource (builder, "/builder/demo.ui", &err);
45       if (err)
46         {
47           g_error ("ERROR: %s\n", err->message);
48           return NULL;
49         }
50       gtk_builder_connect_signals (builder, NULL);
51       window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
52       gtk_window_set_screen (GTK_WINDOW (window),
53                              gtk_widget_get_screen (do_widget));
54       g_signal_connect (window, "destroy",
55                         G_CALLBACK (gtk_widget_destroyed), &window);
56     }
57
58   if (!gtk_widget_get_visible (window))
59     {
60       gtk_widget_show_all (window);
61     }
62   else
63     {
64       gtk_widget_destroy (window);
65       window = NULL;
66     }
67
68
69   return window;
70 }