[gnome-panel] panel: Add some helper API for GSettings



commit 3a9a039840fa97db1c352cfa4b3cfaea77b345bc
Author: Vincent Untz <vuntz gnome org>
Date:   Thu Mar 24 20:49:44 2011 +0100

    panel: Add some helper API for GSettings

 gnome-panel/libpanel-util/Makefile.am       |    2 +
 gnome-panel/libpanel-util/panel-gsettings.c |  123 +++++++++++++++++++++++++++
 gnome-panel/libpanel-util/panel-gsettings.h |   41 +++++++++
 3 files changed, 166 insertions(+), 0 deletions(-)
---
diff --git a/gnome-panel/libpanel-util/Makefile.am b/gnome-panel/libpanel-util/Makefile.am
index e8937e3..8e9ab6e 100644
--- a/gnome-panel/libpanel-util/Makefile.am
+++ b/gnome-panel/libpanel-util/Makefile.am
@@ -17,6 +17,8 @@ libpanel_util_la_SOURCES =		\
 	panel-error.h			\
 	panel-glib.c			\
 	panel-glib.h			\
+	panel-gsettings.c		\
+	panel-gsettings.h		\
 	panel-gtk.c			\
 	panel-gtk.h			\
 	panel-icon-chooser.c		\
diff --git a/gnome-panel/libpanel-util/panel-gsettings.c b/gnome-panel/libpanel-util/panel-gsettings.c
new file mode 100644
index 0000000..8d1368f
--- /dev/null
+++ b/gnome-panel/libpanel-util/panel-gsettings.c
@@ -0,0 +1,123 @@
+/*
+ * panel-gsettings.c: various small extensions to gsettings
+ *
+ * Copyright (C) 2011 Novell, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ *	Vincent Untz <vuntz gnome org>
+ */
+
+#include <gio/gio.h>
+
+#include "panel-gsettings.h"
+
+/* Adapted from is_valid_keyname() in glib (gio/glib-compile-schemas.c)
+ * Differences:
+ *  - gettext support removed (we don't need translations here)
+ *  - remove support for allow_any_name
+ */
+gboolean
+panel_gsettings_is_valid_keyname (const gchar  *key,
+                                  GError      **error)
+{
+  gint i;
+
+  if (key[0] == '\0')
+    {
+      g_set_error_literal (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
+                           "empty names are not permitted");
+      return FALSE;
+    }
+
+  if (!g_ascii_islower (key[0]))
+    {
+      g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
+                   "invalid name '%s': names must begin "
+                     "with a lowercase letter", key);
+      return FALSE;
+    }
+
+  for (i = 1; key[i]; i++)
+    {
+      if (key[i] != '-' &&
+          !g_ascii_islower (key[i]) &&
+          !g_ascii_isdigit (key[i]))
+        {
+          g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
+                       "invalid name '%s': invalid character '%c'; "
+                         "only lowercase letters, numbers and dash ('-') "
+                         "are permitted.", key, key[i]);
+          return FALSE;
+        }
+
+      if (key[i] == '-' && key[i + 1] == '-')
+        {
+          g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
+                       "invalid name '%s': two successive dashes ('--') "
+                         "are not permitted.", key);
+          return FALSE;
+        }
+    }
+
+  if (key[i - 1] == '-')
+    {
+      g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
+                   "invalid name '%s': the last character may not be a "
+                     "dash ('-').", key);
+      return FALSE;
+    }
+
+  if (i > 32)
+    {
+      g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
+                   "invalid name '%s': maximum length is 32", key);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+gboolean
+panel_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;
+}
diff --git a/gnome-panel/libpanel-util/panel-gsettings.h b/gnome-panel/libpanel-util/panel-gsettings.h
new file mode 100644
index 0000000..c9630b4
--- /dev/null
+++ b/gnome-panel/libpanel-util/panel-gsettings.h
@@ -0,0 +1,41 @@
+/*
+ * panel-gsettings.h: various small extensions to gsettings
+ *
+ * Copyright (C) 2011 Novell, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ *	Vincent Untz <vuntz gnome org>
+ */
+
+#ifndef __PANEL_GSETTINGS_H__
+#define __PANEL_GSETTINGS_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+gboolean panel_gsettings_is_valid_keyname (const gchar  *key,
+                                           GError      **error);
+
+gboolean panel_gsettings_append_strv      (GSettings   *settings,
+                                           const gchar *key,
+                                           const gchar *value);
+
+G_END_DECLS
+
+#endif /* __PANEL_GSETTINGS_H__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]