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;
|
int i;
|
||||||
|
|
||||||
tree_rules = _gtk_css_selector_tree_match_all (provider->priv->tree, matcher);
|
tree_rules = _gtk_css_selector_tree_match_all (provider->priv->tree, matcher);
|
||||||
verify_tree_match_results (provider, matcher, tree_rules);
|
if (tree_rules)
|
||||||
|
|
||||||
for (i = tree_rules->len - 1; i >= 0; i--)
|
|
||||||
{
|
{
|
||||||
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)
|
if (change != verify_change)
|
||||||
@ -1671,8 +1676,6 @@ verify_tree_get_change_results (GtkCssProvider *provider,
|
|||||||
g_warning (s->str);
|
g_warning (s->str);
|
||||||
g_string_free (s, TRUE);
|
g_string_free (s, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_ptr_array_free (tree_rules, TRUE);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -1711,46 +1714,46 @@ gtk_css_provider_get_style_property (GtkStyleProvider *provider,
|
|||||||
}
|
}
|
||||||
|
|
||||||
tree_rules = _gtk_css_selector_tree_match_all (priv->tree, &matcher);
|
tree_rules = _gtk_css_selector_tree_match_all (priv->tree, &matcher);
|
||||||
verify_tree_match_results (css_provider, &matcher, tree_rules);
|
if (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--)
|
|
||||||
{
|
{
|
||||||
GtkCssRuleset *ruleset = tree_rules->pdata[i];
|
verify_tree_match_results (css_provider, &matcher, tree_rules);
|
||||||
|
|
||||||
if (ruleset->widget_style == NULL)
|
prop_name = g_strdup_printf ("-%s-%s",
|
||||||
continue;
|
g_type_name (pspec->owner_type),
|
||||||
|
pspec->name);
|
||||||
|
|
||||||
for (val = ruleset->widget_style; val != NULL; val = val->next)
|
for (i = tree_rules->len - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (strcmp (val->name, prop_name) == 0)
|
GtkCssRuleset *ruleset = tree_rules->pdata[i];
|
||||||
{
|
|
||||||
GtkCssScanner *scanner;
|
|
||||||
|
|
||||||
scanner = gtk_css_scanner_new (css_provider,
|
if (ruleset->widget_style == NULL)
|
||||||
NULL,
|
continue;
|
||||||
val->section,
|
|
||||||
val->section != NULL ? gtk_css_section_get_file (val->section) : NULL,
|
|
||||||
val->value);
|
|
||||||
|
|
||||||
found = _gtk_css_style_funcs_parse_value (value,
|
for (val = ruleset->widget_style; val != NULL; val = val->next)
|
||||||
scanner->parser);
|
{
|
||||||
|
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)
|
g_free (prop_name);
|
||||||
break;
|
g_ptr_array_free (tree_rules, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (prop_name);
|
|
||||||
g_ptr_array_free (tree_rules, TRUE);
|
|
||||||
gtk_widget_path_unref (path);
|
gtk_widget_path_unref (path);
|
||||||
|
|
||||||
return found;
|
return found;
|
||||||
@ -1797,39 +1800,42 @@ gtk_css_style_provider_lookup (GtkStyleProviderPrivate *provider,
|
|||||||
priv = css_provider->priv;
|
priv = css_provider->priv;
|
||||||
|
|
||||||
tree_rules = _gtk_css_selector_tree_match_all (priv->tree, matcher);
|
tree_rules = _gtk_css_selector_tree_match_all (priv->tree, matcher);
|
||||||
verify_tree_match_results (css_provider, matcher, tree_rules);
|
if (tree_rules)
|
||||||
|
|
||||||
for (i = tree_rules->len - 1; i >= 0; i--)
|
|
||||||
{
|
{
|
||||||
ruleset = tree_rules->pdata[i];
|
verify_tree_match_results (css_provider, matcher, tree_rules);
|
||||||
|
|
||||||
if (ruleset->styles == NULL)
|
for (i = tree_rules->len - 1; i >= 0; i--)
|
||||||
continue;
|
|
||||||
|
|
||||||
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;
|
ruleset = tree_rules->pdata[i];
|
||||||
guint id = _gtk_css_style_property_get_id (prop);
|
|
||||||
|
|
||||||
if (!_gtk_css_lookup_is_missing (lookup, id))
|
if (ruleset->styles == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
_gtk_css_lookup_set (lookup,
|
if (!_gtk_bitmask_intersects (_gtk_css_lookup_get_missing (lookup),
|
||||||
id,
|
ruleset->set_styles))
|
||||||
ruleset->styles[j].section,
|
continue;
|
||||||
ruleset->styles[j].value);
|
|
||||||
|
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)))
|
g_ptr_array_free (tree_rules, TRUE);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_ptr_array_free (tree_rules, TRUE);
|
|
||||||
|
|
||||||
if (change)
|
if (change)
|
||||||
{
|
{
|
||||||
GtkCssMatcher change_matcher;
|
GtkCssMatcher change_matcher;
|
||||||
|
Loading…
Reference in New Issue
Block a user