1 #include <gtk/gtk.h>
2
3 #include "exampleapp.h"
4 #include "exampleappwin.h"
5 #include "exampleappprefs.h"
6
7 struct _ExampleAppPrefs
8 {
9 GtkDialog parent;
10 };
11
12 typedef struct _ExampleAppPrefsPrivate ExampleAppPrefsPrivate;
13
14 struct _ExampleAppPrefsPrivate
15 {
16 GSettings *settings;
17 GtkWidget *font;
18 GtkWidget *transition;
19 };
20
G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppPrefs,example_app_prefs,GTK_TYPE_DIALOG)21 G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppPrefs, example_app_prefs, GTK_TYPE_DIALOG)
22
23 static void
24 example_app_prefs_init (ExampleAppPrefs *prefs)
25 {
26 ExampleAppPrefsPrivate *priv;
27
28 priv = example_app_prefs_get_instance_private (prefs);
29 gtk_widget_init_template (GTK_WIDGET (prefs));
30 priv->settings = g_settings_new ("org.gtk.exampleapp");
31
32 g_settings_bind (priv->settings, "font",
33 priv->font, "font",
34 G_SETTINGS_BIND_DEFAULT);
35 g_settings_bind (priv->settings, "transition",
36 priv->transition, "active-id",
37 G_SETTINGS_BIND_DEFAULT);
38 }
39
40 static void
example_app_prefs_dispose(GObject * object)41 example_app_prefs_dispose (GObject *object)
42 {
43 ExampleAppPrefsPrivate *priv;
44
45 priv = example_app_prefs_get_instance_private (EXAMPLE_APP_PREFS (object));
46 g_clear_object (&priv->settings);
47
48 G_OBJECT_CLASS (example_app_prefs_parent_class)->dispose (object);
49 }
50
51 static void
example_app_prefs_class_init(ExampleAppPrefsClass * class)52 example_app_prefs_class_init (ExampleAppPrefsClass *class)
53 {
54 G_OBJECT_CLASS (class)->dispose = example_app_prefs_dispose;
55
56 gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
57 "/org/gtk/exampleapp/prefs.ui");
58 gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (class), ExampleAppPrefs, font);
59 gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (class), ExampleAppPrefs, transition);
60 }
61
62 ExampleAppPrefs *
example_app_prefs_new(ExampleAppWindow * win)63 example_app_prefs_new (ExampleAppWindow *win)
64 {
65 return g_object_new (EXAMPLE_APP_PREFS_TYPE, "transient-for", win, "use-header-bar", TRUE, NULL);
66 }
67