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