1/* Written by Florian Muellner
2 * https://bugzilla.gnome.org/show_bug.cgi?id=761760
3 */
4
5#include <gtk/gtk.h>
6
7static void
8on_activate (GApplication *app,
9 gpointer data)
10{
11 static GtkWidget *window = NULL;
12
13 if (window == NULL)
14 {
15 GtkWidget *header, *sidebar_toggle, *animation_switch;
16 GtkWidget *hbox, *revealer, *sidebar, *img;
17
18 window = gtk_application_window_new (GTK_APPLICATION (app));
19 gtk_window_set_default_size (GTK_WINDOW (window), width: 400, height: 300);
20
21 /* titlebar */
22 header = gtk_header_bar_new ();
23 gtk_window_set_titlebar (GTK_WINDOW (window), titlebar: header);
24
25 sidebar_toggle = gtk_toggle_button_new_with_label (label: "Show Sidebar");
26 gtk_header_bar_pack_start (GTK_HEADER_BAR (header), child: sidebar_toggle);
27
28 animation_switch = gtk_switch_new ();
29 gtk_widget_set_valign (widget: animation_switch, align: GTK_ALIGN_CENTER);
30 gtk_header_bar_pack_end (GTK_HEADER_BAR (header), child: animation_switch);
31 gtk_header_bar_pack_end (GTK_HEADER_BAR (header),
32 child: gtk_label_new (str: "Animations"));
33
34 /* content */
35 hbox = gtk_box_new (orientation: GTK_ORIENTATION_HORIZONTAL, spacing: 0);
36 gtk_window_set_child (GTK_WINDOW (window), child: hbox);
37
38 revealer = gtk_revealer_new ();
39 gtk_revealer_set_transition_type (GTK_REVEALER (revealer),
40 transition: GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT);
41 gtk_box_append (GTK_BOX (hbox), child: revealer);
42
43 sidebar = gtk_box_new (orientation: GTK_ORIENTATION_VERTICAL, spacing: 0);
44 gtk_widget_set_size_request (widget: sidebar, width: 150, height: -1);
45 gtk_widget_add_css_class (widget: sidebar, css_class: "sidebar");
46 gtk_revealer_set_child (GTK_REVEALER (revealer), child: sidebar);
47
48 img = gtk_image_new ();
49 g_object_set (object: img, first_property_name: "icon-name", "face-smile-symbolic",
50 "pixel-size", 128,
51 "hexpand", TRUE,
52 "halign", GTK_ALIGN_CENTER,
53 "valign", GTK_ALIGN_CENTER,
54 NULL);
55 gtk_box_append (GTK_BOX (hbox), child: img);
56
57 g_object_bind_property (source: sidebar_toggle, source_property: "active",
58 target: revealer, target_property: "reveal-child",
59 flags: G_BINDING_SYNC_CREATE);
60 g_object_bind_property (source: gtk_settings_get_default(), source_property: "gtk-enable-animations",
61 target: animation_switch, target_property: "active",
62 flags: G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
63
64 }
65 gtk_window_present (GTK_WINDOW (window));
66}
67
68int
69main (int argc, char *argv[])
70{
71 GtkApplication *app = gtk_application_new (application_id: "org.gtk.fmuellner.Revealer", flags: 0);
72
73 g_signal_connect (app, "activate", G_CALLBACK (on_activate), NULL);
74
75 return g_application_run (G_APPLICATION (app), argc, argv);
76}
77
78

source code of gtk/tests/testrevealer2.c