diff options
author | Matthias Clasen <mclasen@redhat.com> | 2016-03-05 23:34:50 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2016-03-05 23:44:03 -0500 |
commit | 9c0e4c174aaae4968bc1970082fdef3183136729 (patch) | |
tree | 4a4d4f8bbfcc433a476b934887b51e200017f74a /gtk/gtkbuilder.c | |
parent | 27a6183b98e3769a15add5dc0ef0ed7cbb6b65bc (diff) | |
download | gtk+-9c0e4c174aaae4968bc1970082fdef3183136729.tar.gz |
builder: Allow 'primary' as a modifier value
Support aliases for flags values in GtkBuilder, and use this
to support the special value 'primary' for GdkModifierType
values.
https://bugzilla.gnome.org/show_bug.cgi?id=699891
Diffstat (limited to 'gtk/gtkbuilder.c')
-rw-r--r-- | gtk/gtkbuilder.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c index ca51168220..50375d3081 100644 --- a/gtk/gtkbuilder.c +++ b/gtk/gtkbuilder.c @@ -1954,7 +1954,7 @@ gtk_builder_value_from_string_type (GtkBuilder *builder, { guint flags_value; - if (!_gtk_builder_flags_from_string (type, string, &flags_value, error)) + if (!_gtk_builder_flags_from_string (type, NULL, string, &flags_value, error)) { ret = FALSE; break; @@ -2202,13 +2202,14 @@ _gtk_builder_enum_from_string (GType type, gboolean _gtk_builder_flags_from_string (GType type, + GFlagsValue *aliases, const gchar *string, guint *flags_value, GError **error) { GFlagsClass *fclass; gchar *endptr, *prevptr; - guint i, j, value; + guint i, j, k, value; gchar *flagstr; GFlagsValue *fv; const gchar *flag; @@ -2268,7 +2269,23 @@ _gtk_builder_flags_from_string (GType type, if (endptr > flag) { *endptr = '\0'; - fv = g_flags_get_value_by_name (fclass, flag); + + fv = NULL; + + if (aliases) + { + for (k = 0; aliases[k].value_nick; k++) + { + if (g_ascii_strcasecmp (aliases[k].value_nick, flag) == 0) + { + fv = &aliases[k]; + break; + } + } + } + + if (!fv) + fv = g_flags_get_value_by_name (fclass, flag); if (!fv) fv = g_flags_get_value_by_nick (fclass, flag); |