1/* Theming/CSS Accordion
2 *
3 * A simple accordion demo written using CSS transitions and multiple backgrounds
4 */
5
6#include <gtk/gtk.h>
7
8static void
9apply_css (GtkWidget *widget, GtkStyleProvider *provider)
10{
11 GtkWidget *child;
12
13 gtk_style_context_add_provider (context: gtk_widget_get_style_context (widget), provider, G_MAXUINT);
14 for (child = gtk_widget_get_first_child (widget);
15 child != NULL;
16 child = gtk_widget_get_next_sibling (widget: child))
17 apply_css (widget: child, provider);
18}
19
20GtkWidget *
21do_css_accordion (GtkWidget *do_widget)
22{
23 static GtkWidget *window = NULL;
24
25 if (!window)
26 {
27 GtkWidget *container, *child;
28 GtkStyleProvider *provider;
29
30 window = gtk_window_new ();
31 gtk_window_set_title (GTK_WINDOW (window), title: "CSS Accordion");
32 gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
33 gtk_window_set_default_size (GTK_WINDOW (window), width: 600, height: 300);
34 g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window);
35
36 container = gtk_box_new (orientation: GTK_ORIENTATION_HORIZONTAL, spacing: 0);
37 gtk_widget_set_halign (widget: container, align: GTK_ALIGN_CENTER);
38 gtk_widget_set_valign (widget: container, align: GTK_ALIGN_CENTER);
39 gtk_window_set_child (GTK_WINDOW (window), child: container);
40
41 child = gtk_button_new_with_label (label: "This");
42 gtk_box_append (GTK_BOX (container), child);
43
44 child = gtk_button_new_with_label (label: "Is");
45 gtk_box_append (GTK_BOX (container), child);
46
47 child = gtk_button_new_with_label (label: "A");
48 gtk_box_append (GTK_BOX (container), child);
49
50 child = gtk_button_new_with_label (label: "CSS");
51 gtk_box_append (GTK_BOX (container), child);
52
53 child = gtk_button_new_with_label (label: "Accordion");
54 gtk_box_append (GTK_BOX (container), child);
55
56 child = gtk_button_new_with_label (label: ":-)");
57 gtk_box_append (GTK_BOX (container), child);
58
59 provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
60 gtk_css_provider_load_from_resource (GTK_CSS_PROVIDER (provider), resource_path: "/css_accordion/css_accordion.css");
61
62 apply_css (widget: window, provider);
63 }
64
65 if (!gtk_widget_get_visible (widget: window))
66 gtk_widget_show (widget: window);
67 else
68 gtk_window_destroy (GTK_WINDOW (window));
69
70 return window;
71}
72

source code of gtk/demos/gtk-demo/css_accordion.c