1 | /* Written by Florian Muellner |
2 | * https://bugzilla.gnome.org/show_bug.cgi?id=761760 |
3 | */ |
4 | |
5 | #include <gtk/gtk.h> |
6 | |
7 | static void |
8 | on_activate (GApplication *app, |
9 | gpointer data) |
10 | { |
11 | static GtkWidget *window = NULL; |
12 | |
13 | if (window == NULL) |
14 | { |
15 | GtkWidget *, *, *animation_switch; |
16 | GtkWidget *hbox, *revealer, *, *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 | |
68 | int |
69 | main (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 | |