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