]> Pileus Git - ~andy/gtk/blob - demos/gtk-demo/theming_style_classes.c
gtk-demo: Use explicit resource:// urls in CSS
[~andy/gtk] / demos / gtk-demo / theming_style_classes.c
1 /* CSS Theming/Style Classes :: theming.ui
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 #include "demo-common.h"
13
14 static GtkWidget *window = NULL;
15
16 GtkWidget *
17 do_theming_style_classes (GtkWidget *do_widget)
18 {
19   GtkWidget *grid;
20   GtkBuilder *builder;
21   GError *err = NULL;
22
23   if (!window)
24     {
25       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
26       gtk_window_set_screen (GTK_WINDOW (window),
27                              gtk_widget_get_screen (do_widget));
28       gtk_window_set_title (GTK_WINDOW (window), "Style Classes");
29       gtk_container_set_border_width (GTK_CONTAINER (window), 12);
30       g_signal_connect (window, "destroy",
31                         G_CALLBACK (gtk_widget_destroyed), &window);
32
33       builder = gtk_builder_new ();
34       gtk_builder_add_from_resource (builder, "/theming_style_classes/theming.ui", NULL);
35       if (err)
36         {
37           g_error ("ERROR: %s\n", err->message);
38           return NULL;
39         }
40
41       grid = (GtkWidget *)gtk_builder_get_object (builder, "grid");
42       gtk_widget_show_all (grid);
43       gtk_container_add (GTK_CONTAINER (window), grid);
44       g_object_unref (builder);
45     }
46
47   if (!gtk_widget_get_visible (window))
48     {
49       gtk_widget_show (window);
50     }
51   else
52     {
53       gtk_widget_destroy (window);
54       window = NULL;
55     }
56
57   return window;
58 }