]> Pileus Git - ~andy/gtk/blob - demos/gtk-demo/theming_style_classes.c
fa9cded39a32d9c2996b700348559541facc4de3
[~andy/gtk] / demos / gtk-demo / theming_style_classes.c
1 /* CSS Theming/Style Classes
2  *
3  * GTK+ uses CSS for theming. Style classes can be associated
4  * with widgets to inform the theme about intended rendering.
5  *
6  * This demo shows some common examples where theming features
7  * of GTK+ are used for certain effects: primary toolbars,
8  * inline toolbars and linked buttons.
9  */
10
11 #include <gtk/gtk.h>
12
13 static GtkWidget *window = NULL;
14
15 GtkWidget *
16 do_theming_style_classes (GtkWidget *do_widget)
17 {
18   GtkWidget *grid;
19   GtkBuilder *builder;
20   GError *err = NULL;
21
22   if (!window)
23     {
24       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
25       gtk_window_set_screen (GTK_WINDOW (window),
26                              gtk_widget_get_screen (do_widget));
27       gtk_window_set_title (GTK_WINDOW (window), "Style Classes");
28       gtk_container_set_border_width (GTK_CONTAINER (window), 12);
29       g_signal_connect (window, "destroy",
30                         G_CALLBACK (gtk_widget_destroyed), &window);
31
32       builder = gtk_builder_new ();
33       gtk_builder_add_from_resource (builder, "/theming_style_classes/theming.ui", NULL);
34       if (err)
35         {
36           g_error ("ERROR: %s\n", err->message);
37           return NULL;
38         }
39
40       grid = (GtkWidget *)gtk_builder_get_object (builder, "grid");
41       gtk_widget_show_all (grid);
42       gtk_container_add (GTK_CONTAINER (window), grid);
43       g_object_unref (builder);
44     }
45
46   if (!gtk_widget_get_visible (window))
47     {
48       gtk_widget_show (window);
49     }
50   else
51     {
52       gtk_widget_destroy (window);
53       window = NULL;
54     }
55
56   return window;
57 }