diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-09-07 12:43:19 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-09-07 12:43:19 -0400 |
commit | 3d01f29bd9ce1322a0dc6043ba01d9ba9b4ef7ab (patch) | |
tree | efa6852eb6cd8d46124b95eb169f6b3edb9d261c /gtk/gtkbuilder.c | |
parent | 20079a9960778e320a0028316a565fd2cffc3c38 (diff) | |
download | gtk+-3d01f29bd9ce1322a0dc6043ba01d9ba9b4ef7ab.tar.gz |
builder: Move a function
Move _gtk_builder_boolean_from_string in the same source file
as the other _from_functions.
Diffstat (limited to 'gtk/gtkbuilder.c')
-rw-r--r-- | gtk/gtkbuilder.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c index caf7610ec4..0f04ed72e8 100644 --- a/gtk/gtkbuilder.c +++ b/gtk/gtkbuilder.c @@ -2265,6 +2265,52 @@ _gtk_builder_flags_from_string (GType type, return ret; } +gboolean +_gtk_builder_boolean_from_string (const gchar *string, + gboolean *value, + GError **error) +{ + gboolean retval = TRUE; + int length; + + g_assert (string != NULL); + length = strlen (string); + + if (length == 0) + retval = FALSE; + else if (length == 1) + { + gchar c = g_ascii_tolower (string[0]); + if (c == 'y' || c == 't' || c == '1') + *value = TRUE; + else if (c == 'n' || c == 'f' || c == '0') + *value = FALSE; + else + retval = FALSE; + } + else + { + gchar *lower = g_ascii_strdown (string, length); + + if (strcmp (lower, "yes") == 0 || strcmp (lower, "true") == 0) + *value = TRUE; + else if (strcmp (lower, "no") == 0 || strcmp (lower, "false") == 0) + *value = FALSE; + else + retval = FALSE; + g_free (lower); + } + + if (!retval) + g_set_error (error, + GTK_BUILDER_ERROR, + GTK_BUILDER_ERROR_INVALID_VALUE, + "Could not parse boolean '%s'", + string); + + return retval; +} + /** * gtk_builder_get_type_from_name: * @builder: a #GtkBuilder |