| 1 | /* |
| 2 | * Copyright © 2009, 2010 Codethink Limited |
| 3 | * |
| 4 | * This library is free software; you can redistribute it and/or |
| 5 | * modify it under the terms of the GNU Lesser General Public |
| 6 | * License as published by the Free Software Foundation; either |
| 7 | * version 2.1 of the License, or (at your option) any later version. |
| 8 | * |
| 9 | * This library is distributed in the hope that it will be useful, |
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 12 | * Lesser General Public License for more details. |
| 13 | * |
| 14 | * You should have received a copy of the GNU Lesser General Public |
| 15 | * License along with this library; if not, see <http://www.gnu.org/licenses/>. |
| 16 | * |
| 17 | * Author: Ryan Lortie <desrt@desrt.ca> |
| 18 | */ |
| 19 | |
| 20 | #ifndef __G_SETTINGS_H__ |
| 21 | #define __G_SETTINGS_H__ |
| 22 | |
| 23 | #if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) |
| 24 | #error "Only <gio/gio.h> can be included directly." |
| 25 | #endif |
| 26 | |
| 27 | #include <gio/gsettingsschema.h> |
| 28 | #include <gio/giotypes.h> |
| 29 | |
| 30 | G_BEGIN_DECLS |
| 31 | |
| 32 | #define G_TYPE_SETTINGS (g_settings_get_type ()) |
| 33 | #define G_SETTINGS(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ |
| 34 | G_TYPE_SETTINGS, GSettings)) |
| 35 | #define G_SETTINGS_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ |
| 36 | G_TYPE_SETTINGS, GSettingsClass)) |
| 37 | #define G_IS_SETTINGS(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_SETTINGS)) |
| 38 | #define G_IS_SETTINGS_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_SETTINGS)) |
| 39 | #define G_SETTINGS_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ |
| 40 | G_TYPE_SETTINGS, GSettingsClass)) |
| 41 | |
| 42 | typedef struct _GSettingsPrivate GSettingsPrivate; |
| 43 | typedef struct _GSettingsClass GSettingsClass; |
| 44 | |
| 45 | struct _GSettingsClass |
| 46 | { |
| 47 | GObjectClass parent_class; |
| 48 | |
| 49 | /* Signals */ |
| 50 | void (*writable_changed) (GSettings *settings, |
| 51 | const gchar *key); |
| 52 | void (*changed) (GSettings *settings, |
| 53 | const gchar *key); |
| 54 | gboolean (*writable_change_event) (GSettings *settings, |
| 55 | GQuark key); |
| 56 | gboolean (*change_event) (GSettings *settings, |
| 57 | const GQuark *keys, |
| 58 | gint n_keys); |
| 59 | |
| 60 | gpointer padding[20]; |
| 61 | }; |
| 62 | |
| 63 | struct _GSettings |
| 64 | { |
| 65 | GObject parent_instance; |
| 66 | GSettingsPrivate *priv; |
| 67 | }; |
| 68 | |
| 69 | |
| 70 | GLIB_AVAILABLE_IN_ALL |
| 71 | GType g_settings_get_type (void); |
| 72 | |
| 73 | GLIB_DEPRECATED_IN_2_40_FOR(g_settings_schema_source_list_schemas) |
| 74 | const gchar * const * g_settings_list_schemas (void); |
| 75 | GLIB_DEPRECATED_IN_2_40_FOR(g_settings_schema_source_list_schemas) |
| 76 | const gchar * const * g_settings_list_relocatable_schemas (void); |
| 77 | GLIB_AVAILABLE_IN_ALL |
| 78 | GSettings * g_settings_new (const gchar *schema_id); |
| 79 | GLIB_AVAILABLE_IN_ALL |
| 80 | GSettings * g_settings_new_with_path (const gchar *schema_id, |
| 81 | const gchar *path); |
| 82 | GLIB_AVAILABLE_IN_ALL |
| 83 | GSettings * g_settings_new_with_backend (const gchar *schema_id, |
| 84 | GSettingsBackend *backend); |
| 85 | GLIB_AVAILABLE_IN_ALL |
| 86 | GSettings * g_settings_new_with_backend_and_path (const gchar *schema_id, |
| 87 | GSettingsBackend *backend, |
| 88 | const gchar *path); |
| 89 | GLIB_AVAILABLE_IN_2_32 |
| 90 | GSettings * g_settings_new_full (GSettingsSchema *schema, |
| 91 | GSettingsBackend *backend, |
| 92 | const gchar *path); |
| 93 | GLIB_AVAILABLE_IN_ALL |
| 94 | gchar ** g_settings_list_children (GSettings *settings); |
| 95 | GLIB_DEPRECATED_IN_2_46_FOR(g_settings_schema_list_keys) |
| 96 | gchar ** g_settings_list_keys (GSettings *settings); |
| 97 | GLIB_DEPRECATED_IN_2_40_FOR(g_settings_schema_key_get_range) |
| 98 | GVariant * g_settings_get_range (GSettings *settings, |
| 99 | const gchar *key); |
| 100 | GLIB_DEPRECATED_IN_2_40_FOR(g_settings_schema_key_range_check) |
| 101 | gboolean g_settings_range_check (GSettings *settings, |
| 102 | const gchar *key, |
| 103 | GVariant *value); |
| 104 | |
| 105 | GLIB_AVAILABLE_IN_ALL |
| 106 | gboolean g_settings_set_value (GSettings *settings, |
| 107 | const gchar *key, |
| 108 | GVariant *value); |
| 109 | GLIB_AVAILABLE_IN_ALL |
| 110 | GVariant * g_settings_get_value (GSettings *settings, |
| 111 | const gchar *key); |
| 112 | |
| 113 | GLIB_AVAILABLE_IN_2_40 |
| 114 | GVariant * g_settings_get_user_value (GSettings *settings, |
| 115 | const gchar *key); |
| 116 | GLIB_AVAILABLE_IN_2_40 |
| 117 | GVariant * g_settings_get_default_value (GSettings *settings, |
| 118 | const gchar *key); |
| 119 | |
| 120 | GLIB_AVAILABLE_IN_ALL |
| 121 | gboolean g_settings_set (GSettings *settings, |
| 122 | const gchar *key, |
| 123 | const gchar *format, |
| 124 | ...); |
| 125 | GLIB_AVAILABLE_IN_ALL |
| 126 | void g_settings_get (GSettings *settings, |
| 127 | const gchar *key, |
| 128 | const gchar *format, |
| 129 | ...); |
| 130 | GLIB_AVAILABLE_IN_ALL |
| 131 | void g_settings_reset (GSettings *settings, |
| 132 | const gchar *key); |
| 133 | |
| 134 | GLIB_AVAILABLE_IN_ALL |
| 135 | gint g_settings_get_int (GSettings *settings, |
| 136 | const gchar *key); |
| 137 | GLIB_AVAILABLE_IN_ALL |
| 138 | gboolean g_settings_set_int (GSettings *settings, |
| 139 | const gchar *key, |
| 140 | gint value); |
| 141 | GLIB_AVAILABLE_IN_2_50 |
| 142 | gint64 g_settings_get_int64 (GSettings *settings, |
| 143 | const gchar *key); |
| 144 | GLIB_AVAILABLE_IN_2_50 |
| 145 | gboolean g_settings_set_int64 (GSettings *settings, |
| 146 | const gchar *key, |
| 147 | gint64 value); |
| 148 | GLIB_AVAILABLE_IN_2_32 |
| 149 | guint g_settings_get_uint (GSettings *settings, |
| 150 | const gchar *key); |
| 151 | GLIB_AVAILABLE_IN_2_32 |
| 152 | gboolean g_settings_set_uint (GSettings *settings, |
| 153 | const gchar *key, |
| 154 | guint value); |
| 155 | GLIB_AVAILABLE_IN_2_50 |
| 156 | guint64 g_settings_get_uint64 (GSettings *settings, |
| 157 | const gchar *key); |
| 158 | GLIB_AVAILABLE_IN_2_50 |
| 159 | gboolean g_settings_set_uint64 (GSettings *settings, |
| 160 | const gchar *key, |
| 161 | guint64 value); |
| 162 | GLIB_AVAILABLE_IN_ALL |
| 163 | gchar * g_settings_get_string (GSettings *settings, |
| 164 | const gchar *key); |
| 165 | GLIB_AVAILABLE_IN_ALL |
| 166 | gboolean g_settings_set_string (GSettings *settings, |
| 167 | const gchar *key, |
| 168 | const gchar *value); |
| 169 | GLIB_AVAILABLE_IN_ALL |
| 170 | gboolean g_settings_get_boolean (GSettings *settings, |
| 171 | const gchar *key); |
| 172 | GLIB_AVAILABLE_IN_ALL |
| 173 | gboolean g_settings_set_boolean (GSettings *settings, |
| 174 | const gchar *key, |
| 175 | gboolean value); |
| 176 | GLIB_AVAILABLE_IN_ALL |
| 177 | gdouble g_settings_get_double (GSettings *settings, |
| 178 | const gchar *key); |
| 179 | GLIB_AVAILABLE_IN_ALL |
| 180 | gboolean g_settings_set_double (GSettings *settings, |
| 181 | const gchar *key, |
| 182 | gdouble value); |
| 183 | GLIB_AVAILABLE_IN_ALL |
| 184 | gchar ** g_settings_get_strv (GSettings *settings, |
| 185 | const gchar *key); |
| 186 | GLIB_AVAILABLE_IN_ALL |
| 187 | gboolean g_settings_set_strv (GSettings *settings, |
| 188 | const gchar *key, |
| 189 | const gchar *const *value); |
| 190 | GLIB_AVAILABLE_IN_ALL |
| 191 | gint g_settings_get_enum (GSettings *settings, |
| 192 | const gchar *key); |
| 193 | GLIB_AVAILABLE_IN_ALL |
| 194 | gboolean g_settings_set_enum (GSettings *settings, |
| 195 | const gchar *key, |
| 196 | gint value); |
| 197 | GLIB_AVAILABLE_IN_ALL |
| 198 | guint g_settings_get_flags (GSettings *settings, |
| 199 | const gchar *key); |
| 200 | GLIB_AVAILABLE_IN_ALL |
| 201 | gboolean g_settings_set_flags (GSettings *settings, |
| 202 | const gchar *key, |
| 203 | guint value); |
| 204 | GLIB_AVAILABLE_IN_ALL |
| 205 | GSettings * g_settings_get_child (GSettings *settings, |
| 206 | const gchar *name); |
| 207 | |
| 208 | GLIB_AVAILABLE_IN_ALL |
| 209 | gboolean g_settings_is_writable (GSettings *settings, |
| 210 | const gchar *name); |
| 211 | |
| 212 | GLIB_AVAILABLE_IN_ALL |
| 213 | void g_settings_delay (GSettings *settings); |
| 214 | GLIB_AVAILABLE_IN_ALL |
| 215 | void g_settings_apply (GSettings *settings); |
| 216 | GLIB_AVAILABLE_IN_ALL |
| 217 | void g_settings_revert (GSettings *settings); |
| 218 | GLIB_AVAILABLE_IN_ALL |
| 219 | gboolean g_settings_get_has_unapplied (GSettings *settings); |
| 220 | GLIB_AVAILABLE_IN_ALL |
| 221 | void g_settings_sync (void); |
| 222 | |
| 223 | /** |
| 224 | * GSettingsBindSetMapping: |
| 225 | * @value: a #GValue containing the property value to map |
| 226 | * @expected_type: the #GVariantType to create |
| 227 | * @user_data: user data that was specified when the binding was created |
| 228 | * |
| 229 | * The type for the function that is used to convert an object property |
| 230 | * value to a #GVariant for storing it in #GSettings. |
| 231 | * |
| 232 | * Returns: a new #GVariant holding the data from @value, |
| 233 | * or %NULL in case of an error |
| 234 | */ |
| 235 | typedef GVariant * (*GSettingsBindSetMapping) (const GValue *value, |
| 236 | const GVariantType *expected_type, |
| 237 | gpointer user_data); |
| 238 | |
| 239 | /** |
| 240 | * GSettingsBindGetMapping: |
| 241 | * @value: return location for the property value |
| 242 | * @variant: the #GVariant |
| 243 | * @user_data: user data that was specified when the binding was created |
| 244 | * |
| 245 | * The type for the function that is used to convert from #GSettings to |
| 246 | * an object property. The @value is already initialized to hold values |
| 247 | * of the appropriate type. |
| 248 | * |
| 249 | * Returns: %TRUE if the conversion succeeded, %FALSE in case of an error |
| 250 | */ |
| 251 | typedef gboolean (*GSettingsBindGetMapping) (GValue *value, |
| 252 | GVariant *variant, |
| 253 | gpointer user_data); |
| 254 | |
| 255 | /** |
| 256 | * GSettingsGetMapping: |
| 257 | * @value: the #GVariant to map, or %NULL |
| 258 | * @result: (out): the result of the mapping |
| 259 | * @user_data: (closure): the user data that was passed to |
| 260 | * g_settings_get_mapped() |
| 261 | * |
| 262 | * The type of the function that is used to convert from a value stored |
| 263 | * in a #GSettings to a value that is useful to the application. |
| 264 | * |
| 265 | * If the value is successfully mapped, the result should be stored at |
| 266 | * @result and %TRUE returned. If mapping fails (for example, if @value |
| 267 | * is not in the right format) then %FALSE should be returned. |
| 268 | * |
| 269 | * If @value is %NULL then it means that the mapping function is being |
| 270 | * given a "last chance" to successfully return a valid value. %TRUE |
| 271 | * must be returned in this case. |
| 272 | * |
| 273 | * Returns: %TRUE if the conversion succeeded, %FALSE in case of an error |
| 274 | **/ |
| 275 | typedef gboolean (*GSettingsGetMapping) (GVariant *value, |
| 276 | gpointer *result, |
| 277 | gpointer user_data); |
| 278 | |
| 279 | /** |
| 280 | * GSettingsBindFlags: |
| 281 | * @G_SETTINGS_BIND_DEFAULT: Equivalent to `G_SETTINGS_BIND_GET|G_SETTINGS_BIND_SET` |
| 282 | * @G_SETTINGS_BIND_GET: Update the #GObject property when the setting changes. |
| 283 | * It is an error to use this flag if the property is not writable. |
| 284 | * @G_SETTINGS_BIND_SET: Update the setting when the #GObject property changes. |
| 285 | * It is an error to use this flag if the property is not readable. |
| 286 | * @G_SETTINGS_BIND_NO_SENSITIVITY: Do not try to bind a "sensitivity" property to the writability of the setting |
| 287 | * @G_SETTINGS_BIND_GET_NO_CHANGES: When set in addition to #G_SETTINGS_BIND_GET, set the #GObject property |
| 288 | * value initially from the setting, but do not listen for changes of the setting |
| 289 | * @G_SETTINGS_BIND_INVERT_BOOLEAN: When passed to g_settings_bind(), uses a pair of mapping functions that invert |
| 290 | * the boolean value when mapping between the setting and the property. The setting and property must both |
| 291 | * be booleans. You cannot pass this flag to g_settings_bind_with_mapping(). |
| 292 | * |
| 293 | * Flags used when creating a binding. These flags determine in which |
| 294 | * direction the binding works. The default is to synchronize in both |
| 295 | * directions. |
| 296 | */ |
| 297 | typedef enum |
| 298 | { |
| 299 | G_SETTINGS_BIND_DEFAULT, |
| 300 | G_SETTINGS_BIND_GET = (1<<0), |
| 301 | G_SETTINGS_BIND_SET = (1<<1), |
| 302 | G_SETTINGS_BIND_NO_SENSITIVITY = (1<<2), |
| 303 | G_SETTINGS_BIND_GET_NO_CHANGES = (1<<3), |
| 304 | G_SETTINGS_BIND_INVERT_BOOLEAN = (1<<4) |
| 305 | } GSettingsBindFlags; |
| 306 | |
| 307 | GLIB_AVAILABLE_IN_ALL |
| 308 | void g_settings_bind (GSettings *settings, |
| 309 | const gchar *key, |
| 310 | gpointer object, |
| 311 | const gchar *property, |
| 312 | GSettingsBindFlags flags); |
| 313 | GLIB_AVAILABLE_IN_ALL |
| 314 | void g_settings_bind_with_mapping (GSettings *settings, |
| 315 | const gchar *key, |
| 316 | gpointer object, |
| 317 | const gchar *property, |
| 318 | GSettingsBindFlags flags, |
| 319 | GSettingsBindGetMapping get_mapping, |
| 320 | GSettingsBindSetMapping set_mapping, |
| 321 | gpointer user_data, |
| 322 | GDestroyNotify destroy); |
| 323 | GLIB_AVAILABLE_IN_ALL |
| 324 | void g_settings_bind_writable (GSettings *settings, |
| 325 | const gchar *key, |
| 326 | gpointer object, |
| 327 | const gchar *property, |
| 328 | gboolean inverted); |
| 329 | GLIB_AVAILABLE_IN_ALL |
| 330 | void g_settings_unbind (gpointer object, |
| 331 | const gchar *property); |
| 332 | |
| 333 | GLIB_AVAILABLE_IN_2_32 |
| 334 | GAction * g_settings_create_action (GSettings *settings, |
| 335 | const gchar *key); |
| 336 | |
| 337 | GLIB_AVAILABLE_IN_ALL |
| 338 | gpointer g_settings_get_mapped (GSettings *settings, |
| 339 | const gchar *key, |
| 340 | GSettingsGetMapping mapping, |
| 341 | gpointer user_data); |
| 342 | |
| 343 | G_END_DECLS |
| 344 | |
| 345 | #endif /* __G_SETTINGS_H__ */ |
| 346 | |