summaryrefslogtreecommitdiff
path: root/gtk/gtkbuilder.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2016-03-05 23:34:50 -0500
committerMatthias Clasen <mclasen@redhat.com>2016-03-05 23:44:03 -0500
commit9c0e4c174aaae4968bc1970082fdef3183136729 (patch)
tree4a4d4f8bbfcc433a476b934887b51e200017f74a /gtk/gtkbuilder.c
parent27a6183b98e3769a15add5dc0ef0ed7cbb6b65bc (diff)
downloadgtk+-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.c23
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);