Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-3.0-or-later
2 : : // SPDX-FileCopyrightText: Andy Holmes <andrew.g.r.holmes@gmail.com>
3 : :
4 : : #define G_LOG_DOMAIN "valent-device-preferences"
5 : :
6 : : #include "config.h"
7 : :
8 : : #include <gio/gio.h>
9 : : #include <gtk/gtk.h>
10 : : #include <adwaita.h>
11 : : #include <valent.h>
12 : :
13 : : #include "valent-device-preferences-group.h"
14 : :
15 : : typedef struct
16 : : {
17 : : ValentContext *context;
18 : : PeasPluginInfo *plugin_info;
19 : : GSettings *settings;
20 : : } ValentDevicePreferencesGroupPrivate;
21 : :
22 [ + + + - ]: 299 : G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ValentDevicePreferencesGroup, valent_device_preferences_group, ADW_TYPE_PREFERENCES_GROUP)
23 : :
24 : : enum {
25 : : PROP_0,
26 : : PROP_CONTEXT,
27 : : PROP_PLUGIN_INFO,
28 : : PROP_SETTINGS,
29 : : N_PROPERTIES
30 : : };
31 : :
32 : : static GParamSpec *properties[N_PROPERTIES] = { NULL, };
33 : :
34 : :
35 : : /*
36 : : * GObject
37 : : */
38 : : static void
39 : 9 : valent_device_preferences_group_finalize (GObject *object)
40 : : {
41 : 9 : ValentDevicePreferencesGroup *self = VALENT_DEVICE_PREFERENCES_GROUP (object);
42 : 9 : ValentDevicePreferencesGroupPrivate *priv = valent_device_preferences_group_get_instance_private (self);
43 : :
44 [ + - ]: 9 : g_clear_object (&priv->context);
45 [ + - ]: 9 : g_clear_object (&priv->plugin_info);
46 [ + - ]: 9 : g_clear_object (&priv->settings);
47 : :
48 : 9 : G_OBJECT_CLASS (valent_device_preferences_group_parent_class)->finalize (object);
49 : 9 : }
50 : :
51 : : static void
52 : 18 : valent_device_preferences_group_get_property (GObject *object,
53 : : guint prop_id,
54 : : GValue *value,
55 : : GParamSpec *pspec)
56 : : {
57 : 18 : ValentDevicePreferencesGroup *self = VALENT_DEVICE_PREFERENCES_GROUP (object);
58 : 18 : ValentDevicePreferencesGroupPrivate *priv = valent_device_preferences_group_get_instance_private (self);
59 : :
60 [ + + - - ]: 18 : switch (prop_id)
61 : : {
62 : 9 : case PROP_CONTEXT:
63 : 9 : g_value_set_object (value, valent_device_preferences_group_get_context (self));
64 : 9 : break;
65 : :
66 : 9 : case PROP_PLUGIN_INFO:
67 : 9 : g_value_set_object (value, priv->plugin_info);
68 : 9 : break;
69 : :
70 : 0 : case PROP_SETTINGS:
71 : 0 : g_value_set_object (value, valent_device_preferences_group_get_settings (self));
72 : 0 : break;
73 : :
74 : 0 : default:
75 : 0 : G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
76 : : }
77 : 18 : }
78 : :
79 : : static void
80 : 18 : valent_device_preferences_group_set_property (GObject *object,
81 : : guint prop_id,
82 : : const GValue *value,
83 : : GParamSpec *pspec)
84 : : {
85 : 18 : ValentDevicePreferencesGroup *self = VALENT_DEVICE_PREFERENCES_GROUP (object);
86 : 18 : ValentDevicePreferencesGroupPrivate *priv = valent_device_preferences_group_get_instance_private (self);
87 : :
88 [ + + - ]: 18 : switch (prop_id)
89 : : {
90 : 9 : case PROP_CONTEXT:
91 : 9 : priv->context = g_value_dup_object (value);
92 : 9 : break;
93 : :
94 : 9 : case PROP_PLUGIN_INFO:
95 : 9 : priv->plugin_info = g_value_dup_object (value);
96 : 9 : break;
97 : :
98 : 0 : default:
99 : 0 : G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
100 : : }
101 : 18 : }
102 : :
103 : : static void
104 : 1 : valent_device_preferences_group_class_init (ValentDevicePreferencesGroupClass *klass)
105 : : {
106 : 1 : GObjectClass *object_class = G_OBJECT_CLASS (klass);
107 : :
108 : 1 : object_class->finalize = valent_device_preferences_group_finalize;
109 : 1 : object_class->get_property = valent_device_preferences_group_get_property;
110 : 1 : object_class->set_property = valent_device_preferences_group_set_property;
111 : :
112 : : /**
113 : : * ValentDevicePreferencesGroup:context: (getter get_context)
114 : : *
115 : : * The [class@Valent.Context] for the [class@Valent.DevicePlugin].
116 : : */
117 : 2 : properties [PROP_CONTEXT] =
118 : 1 : g_param_spec_object ("context", NULL, NULL,
119 : : VALENT_TYPE_CONTEXT,
120 : : (G_PARAM_READWRITE |
121 : : G_PARAM_CONSTRUCT_ONLY |
122 : : G_PARAM_EXPLICIT_NOTIFY |
123 : : G_PARAM_STATIC_STRINGS));
124 : :
125 : : /**
126 : : * ValentDevicePreferencesGroup:plugin-info:
127 : : *
128 : : * The [class@Peas.PluginInfo] describing this plugin.
129 : : */
130 : 2 : properties [PROP_PLUGIN_INFO] =
131 : 1 : g_param_spec_object ("plugin-info", NULL, NULL,
132 : : PEAS_TYPE_PLUGIN_INFO,
133 : : (G_PARAM_READWRITE |
134 : : G_PARAM_CONSTRUCT_ONLY |
135 : : G_PARAM_EXPLICIT_NOTIFY |
136 : : G_PARAM_STATIC_STRINGS));
137 : :
138 : : /**
139 : : * ValentDevicePreferencesGroup:settings: (getter get_settings)
140 : : *
141 : : * The [class@Gio.Settings] for the [class@Valent.DevicePlugin].
142 : : */
143 : 2 : properties [PROP_SETTINGS] =
144 : 1 : g_param_spec_object ("settings", NULL, NULL,
145 : : G_TYPE_SETTINGS,
146 : : (G_PARAM_READABLE |
147 : : G_PARAM_EXPLICIT_NOTIFY |
148 : : G_PARAM_STATIC_STRINGS));
149 : :
150 : 1 : g_object_class_install_properties (object_class, N_PROPERTIES, properties);
151 : 1 : }
152 : :
153 : : static void
154 : 9 : valent_device_preferences_group_init (ValentDevicePreferencesGroup *self)
155 : : {
156 : 9 : }
157 : :
158 : : /**
159 : : * valent_device_preferences_group_get_context:
160 : : * @group: a `ValentDevicePreferencesGroup`
161 : : *
162 : : * Get the [class@Valent.Context] for the [class@Valent.DevicePlugin].
163 : : *
164 : : * Returns: (transfer none) (nullable): a `ValentContext`
165 : : */
166 : : ValentContext *
167 : 20 : valent_device_preferences_group_get_context (ValentDevicePreferencesGroup *group)
168 : : {
169 : 20 : ValentDevicePreferencesGroupPrivate *priv = valent_device_preferences_group_get_instance_private (group);
170 : :
171 [ + - ]: 20 : g_return_val_if_fail (VALENT_IS_DEVICE_PREFERENCES_GROUP (group), NULL);
172 : :
173 [ - + ]: 20 : if (priv->context == NULL)
174 : : {
175 : 20 : g_autoptr (ValentContext) context = NULL;
176 : :
177 : 0 : context = valent_context_new (NULL, "device", "default");
178 [ # # ]: 0 : priv->context = valent_context_get_plugin_context (context, priv->plugin_info);
179 : : }
180 : :
181 : 20 : return priv->context;
182 : : }
183 : :
184 : : /**
185 : : * valent_device_preferences_group_get_settings:
186 : : * @group: a `ValentDevicePreferencesGroup`
187 : : *
188 : : * Get the [class@Gio.Settings] for the [class@Valent.DevicePlugin].
189 : : *
190 : : * Returns: (transfer none) (nullable): a `GSettings`
191 : : */
192 : : GSettings *
193 : 13 : valent_device_preferences_group_get_settings (ValentDevicePreferencesGroup *group)
194 : : {
195 : 13 : ValentDevicePreferencesGroupPrivate *priv = valent_device_preferences_group_get_instance_private (group);
196 : :
197 [ + - ]: 13 : g_return_val_if_fail (VALENT_IS_DEVICE_PREFERENCES_GROUP (group), NULL);
198 : :
199 [ + + ]: 13 : if (priv->settings == NULL)
200 : : {
201 : 9 : ValentContext *context = NULL;
202 : :
203 : 9 : context = valent_device_preferences_group_get_context (group);
204 : 9 : priv->settings = valent_context_get_plugin_settings (context,
205 : : priv->plugin_info,
206 : : "X-DevicePluginSettings");
207 : : }
208 : :
209 : 13 : return priv->settings;
210 : : }
211 : :
|