diff options
author | Stefano Karapetsas <[email protected]> | 2014-04-23 19:40:51 +0200 |
---|---|---|
committer | Stefano Karapetsas <[email protected]> | 2014-04-23 19:40:51 +0200 |
commit | 612be2533ef5b5b7f5ffc497ff928bd57de71b30 (patch) | |
tree | c4ce64cfc53d51e569031eba71f7e16be546ace1 /libmate-desktop | |
parent | 305074064a67c621d54f1e431e26da1feace8b39 (diff) | |
download | mate-desktop-612be2533ef5b5b7f5ffc497ff928bd57de71b30.tar.bz2 mate-desktop-612be2533ef5b5b7f5ffc497ff928bd57de71b30.tar.xz |
Add more GSettings common functions
Diffstat (limited to 'libmate-desktop')
-rw-r--r-- | libmate-desktop/mate-gsettings.c | 74 | ||||
-rw-r--r-- | libmate-desktop/mate-gsettings.h | 11 |
2 files changed, 82 insertions, 3 deletions
diff --git a/libmate-desktop/mate-gsettings.c b/libmate-desktop/mate-gsettings.c index 37bf436..2fb5921 100644 --- a/libmate-desktop/mate-gsettings.c +++ b/libmate-desktop/mate-gsettings.c @@ -24,8 +24,6 @@ #include "mate-gsettings.h" -#include <gio/gio.h> - /** * mate_gsettings_schema_exists: * @schema: schema to check. @@ -54,4 +52,74 @@ mate_gsettings_schema_exists (const gchar* schema) } return schema_exists; -}
\ No newline at end of file +} + +gboolean +mate_gsettings_append_strv (GSettings *settings, + const gchar *key, + const gchar *value) +{ + gchar **old; + gchar **new; + gint size; + gboolean retval; + + old = g_settings_get_strv (settings, key); + + for (size = 0; old[size] != NULL; size++); + + size += 1; /* appended value */ + size += 1; /* NULL */ + + new = g_realloc_n (old, size, sizeof (gchar *)); + + new[size - 2] = g_strdup (value); + new[size - 1] = NULL; + + retval = g_settings_set_strv (settings, key, + (const gchar **) new); + + g_strfreev (new); + + return retval; +} + +gboolean +mate_gsettings_remove_all_from_strv (GSettings *settings, + const gchar *key, + const gchar *value) +{ + GArray *array; + gchar **old; + gint i; + gboolean retval; + + old = g_settings_get_strv (settings, key); + array = g_array_new (TRUE, TRUE, sizeof (gchar *)); + + for (i = 0; old[i] != NULL; i++) { + if (g_strcmp0 (old[i], value) != 0) + array = g_array_append_val (array, old[i]); + } + + retval = g_settings_set_strv (settings, key, + (const gchar **) array->data); + + g_strfreev (old); + g_array_free (array, TRUE); + + return retval; +} + +GSList* +mate_gsettings_strv_to_gslist (const gchar *const *array) +{ + GSList *list = NULL; + gint i; + if (array != NULL) { + for (i = 0; array[i]; i++) { + list = g_slist_append (list, g_strdup (array[i])); + } + } + return list; +} diff --git a/libmate-desktop/mate-gsettings.h b/libmate-desktop/mate-gsettings.h index f4a9d2c..8b6dd30 100644 --- a/libmate-desktop/mate-gsettings.h +++ b/libmate-desktop/mate-gsettings.h @@ -26,11 +26,22 @@ #define __MATE_GSETTINGS_H__ #include <glib.h> +#include <gio/gio.h> G_BEGIN_DECLS gboolean mate_gsettings_schema_exists (const gchar* schema); +gboolean mate_gsettings_append_strv (GSettings *settings, + const gchar *key, + const gchar *value); + +gboolean mate_gsettings_remove_all_from_strv (GSettings *settings, + const gchar *key, + const gchar *value); + +GSList* mate_gsettings_strv_to_gslist (const gchar *const *array); + G_END_DECLS #endif /* __MATE_GSETTINGS_H__ */ |