summaryrefslogtreecommitdiff
path: root/gtk/gtkcssprovider.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkcssprovider.c')
-rw-r--r--gtk/gtkcssprovider.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c
index 1c5441f567..7313bba534 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -801,7 +801,8 @@ enum ParserScope {
SCOPE_PSEUDO_CLASS,
SCOPE_NTH_CHILD,
SCOPE_DECLARATION,
- SCOPE_VALUE
+ SCOPE_VALUE,
+ SCOPE_BINDING_SET
};
/* Extend GtkStateType, since these
@@ -1507,6 +1508,12 @@ scanner_apply_scope (GScanner *scanner,
if (scope == SCOPE_VALUE)
{
scanner->config->cset_identifier_first = G_CSET_a_2_z G_CSET_A_2_Z G_CSET_DIGITS "@#-_";
+ scanner->config->cset_identifier_nth = G_CSET_a_2_z G_CSET_A_2_Z G_CSET_DIGITS "@#-_ +(),.%\t\n'/\"";
+ scanner->config->scan_identifier_1char = TRUE;
+ }
+ else if (scope == SCOPE_BINDING_SET)
+ {
+ scanner->config->cset_identifier_first = G_CSET_a_2_z G_CSET_A_2_Z G_CSET_DIGITS "@#-_";
scanner->config->cset_identifier_nth = G_CSET_a_2_z G_CSET_A_2_Z G_CSET_DIGITS "@#-_ +(){}<>,.%\t\n'/\"";
scanner->config->scan_identifier_1char = TRUE;
}
@@ -3318,19 +3325,27 @@ parse_rule (GtkCssProvider *css_provider,
if (scanner->token != G_TOKEN_LEFT_CURLY)
return G_TOKEN_LEFT_CURLY;
- css_provider_push_scope (css_provider, SCOPE_VALUE);
+ css_provider_push_scope (css_provider, SCOPE_BINDING_SET);
g_scanner_get_next_token (scanner);
do
{
+ GTokenType ret;
+
if (scanner->token != G_TOKEN_IDENTIFIER)
{
scanner->user_data = "Binding definition";
return G_TOKEN_IDENTIFIER;
}
- gtk_binding_entry_add_signal_from_string (binding_set,
- scanner->value.v_identifier);
+ ret = gtk_binding_entry_add_signal_from_string (binding_set,
+ scanner->value.v_identifier);
+ if (ret != G_TOKEN_NONE)
+ {
+ scanner->user_data = "Binding definition";
+ return ret;
+ }
+
g_scanner_get_next_token (scanner);
if (scanner->token != ';')