Handle match_all returning NULL
This is in preparation for not allocating an array at all if there are no matches.
This commit is contained in:
parent
117b50f8fb
commit
2d29ae4159
@ -1638,15 +1638,20 @@ verify_tree_get_change_results (GtkCssProvider *provider,
|
||||
int i;
|
||||
|
||||
tree_rules = _gtk_css_selector_tree_match_all (provider->priv->tree, matcher);
|
||||
verify_tree_match_results (provider, matcher, tree_rules);
|
||||
|
||||
for (i = tree_rules->len - 1; i >= 0; i--)
|
||||
if (tree_rules)
|
||||
{
|
||||
GtkCssRuleset *ruleset;
|
||||
verify_tree_match_results (provider, matcher, tree_rules);
|
||||
|
||||
ruleset = tree_rules->pdata[i];
|
||||
for (i = tree_rules->len - 1; i >= 0; i--)
|
||||
{
|
||||
GtkCssRuleset *ruleset;
|
||||
|
||||
verify_change |= _gtk_css_selector_get_change (ruleset->selector);
|
||||
ruleset = tree_rules->pdata[i];
|
||||
|
||||
verify_change |= _gtk_css_selector_get_change (ruleset->selector);
|
||||
}
|
||||
|
||||
g_ptr_array_free (tree_rules, TRUE);
|
||||
}
|
||||
|
||||
if (change != verify_change)
|
||||
@ -1671,8 +1676,6 @@ verify_tree_get_change_results (GtkCssProvider *provider,
|
||||
g_warning (s->str);
|
||||
g_string_free (s, TRUE);
|
||||
}
|
||||
|
||||
g_ptr_array_free (tree_rules, TRUE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -1711,46 +1714,46 @@ gtk_css_provider_get_style_property (GtkStyleProvider *provider,
|
||||
}
|
||||
|
||||
tree_rules = _gtk_css_selector_tree_match_all (priv->tree, &matcher);
|
||||
verify_tree_match_results (css_provider, &matcher, tree_rules);
|
||||
|
||||
prop_name = g_strdup_printf ("-%s-%s",
|
||||
g_type_name (pspec->owner_type),
|
||||
pspec->name);
|
||||
|
||||
for (i = tree_rules->len - 1; i >= 0; i--)
|
||||
if (tree_rules)
|
||||
{
|
||||
GtkCssRuleset *ruleset = tree_rules->pdata[i];
|
||||
verify_tree_match_results (css_provider, &matcher, tree_rules);
|
||||
|
||||
if (ruleset->widget_style == NULL)
|
||||
continue;
|
||||
prop_name = g_strdup_printf ("-%s-%s",
|
||||
g_type_name (pspec->owner_type),
|
||||
pspec->name);
|
||||
|
||||
for (val = ruleset->widget_style; val != NULL; val = val->next)
|
||||
{
|
||||
if (strcmp (val->name, prop_name) == 0)
|
||||
{
|
||||
GtkCssScanner *scanner;
|
||||
for (i = tree_rules->len - 1; i >= 0; i--)
|
||||
{
|
||||
GtkCssRuleset *ruleset = tree_rules->pdata[i];
|
||||
|
||||
scanner = gtk_css_scanner_new (css_provider,
|
||||
NULL,
|
||||
val->section,
|
||||
val->section != NULL ? gtk_css_section_get_file (val->section) : NULL,
|
||||
val->value);
|
||||
if (ruleset->widget_style == NULL)
|
||||
continue;
|
||||
|
||||
found = _gtk_css_style_funcs_parse_value (value,
|
||||
scanner->parser);
|
||||
for (val = ruleset->widget_style; val != NULL; val = val->next)
|
||||
{
|
||||
if (strcmp (val->name, prop_name) == 0)
|
||||
{
|
||||
GtkCssScanner *scanner;
|
||||
|
||||
gtk_css_scanner_destroy (scanner);
|
||||
scanner = gtk_css_scanner_new (css_provider,
|
||||
NULL,
|
||||
val->section,
|
||||
val->section != NULL ? gtk_css_section_get_file (val->section) : NULL,
|
||||
val->value);
|
||||
found = _gtk_css_style_funcs_parse_value (value, scanner->parser);
|
||||
gtk_css_scanner_destroy (scanner);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found)
|
||||
break;
|
||||
}
|
||||
|
||||
if (found)
|
||||
break;
|
||||
g_free (prop_name);
|
||||
g_ptr_array_free (tree_rules, TRUE);
|
||||
}
|
||||
|
||||
g_free (prop_name);
|
||||
g_ptr_array_free (tree_rules, TRUE);
|
||||
gtk_widget_path_unref (path);
|
||||
|
||||
return found;
|
||||
@ -1797,39 +1800,42 @@ gtk_css_style_provider_lookup (GtkStyleProviderPrivate *provider,
|
||||
priv = css_provider->priv;
|
||||
|
||||
tree_rules = _gtk_css_selector_tree_match_all (priv->tree, matcher);
|
||||
verify_tree_match_results (css_provider, matcher, tree_rules);
|
||||
|
||||
for (i = tree_rules->len - 1; i >= 0; i--)
|
||||
if (tree_rules)
|
||||
{
|
||||
ruleset = tree_rules->pdata[i];
|
||||
verify_tree_match_results (css_provider, matcher, tree_rules);
|
||||
|
||||
if (ruleset->styles == NULL)
|
||||
continue;
|
||||
|
||||
if (!_gtk_bitmask_intersects (_gtk_css_lookup_get_missing (lookup),
|
||||
ruleset->set_styles))
|
||||
continue;
|
||||
|
||||
for (j = 0; j < ruleset->n_styles; j++)
|
||||
for (i = tree_rules->len - 1; i >= 0; i--)
|
||||
{
|
||||
GtkCssStyleProperty *prop = ruleset->styles[j].property;
|
||||
guint id = _gtk_css_style_property_get_id (prop);
|
||||
ruleset = tree_rules->pdata[i];
|
||||
|
||||
if (!_gtk_css_lookup_is_missing (lookup, id))
|
||||
if (ruleset->styles == NULL)
|
||||
continue;
|
||||
|
||||
_gtk_css_lookup_set (lookup,
|
||||
id,
|
||||
ruleset->styles[j].section,
|
||||
ruleset->styles[j].value);
|
||||
if (!_gtk_bitmask_intersects (_gtk_css_lookup_get_missing (lookup),
|
||||
ruleset->set_styles))
|
||||
continue;
|
||||
|
||||
for (j = 0; j < ruleset->n_styles; j++)
|
||||
{
|
||||
GtkCssStyleProperty *prop = ruleset->styles[j].property;
|
||||
guint id = _gtk_css_style_property_get_id (prop);
|
||||
|
||||
if (!_gtk_css_lookup_is_missing (lookup, id))
|
||||
continue;
|
||||
|
||||
_gtk_css_lookup_set (lookup,
|
||||
id,
|
||||
ruleset->styles[j].section,
|
||||
ruleset->styles[j].value);
|
||||
}
|
||||
|
||||
if (_gtk_bitmask_is_empty (_gtk_css_lookup_get_missing (lookup)))
|
||||
break;
|
||||
}
|
||||
|
||||
if (_gtk_bitmask_is_empty (_gtk_css_lookup_get_missing (lookup)))
|
||||
break;
|
||||
g_ptr_array_free (tree_rules, TRUE);
|
||||
}
|
||||
|
||||
g_ptr_array_free (tree_rules, TRUE);
|
||||
|
||||
if (change)
|
||||
{
|
||||
GtkCssMatcher change_matcher;
|
||||
|
Loading…
Reference in New Issue
Block a user