| 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 |  |