summaryrefslogtreecommitdiff
path: root/gtk/gtkcssprovider.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2012-03-17 21:09:51 +0100
committerBenjamin Otte <otte@redhat.com>2012-04-17 08:59:08 +0200
commit8dbe8c83491c5877c9b19928f257ec7a671cb45e (patch)
tree937880e83a99ab80678f76492b3997038acb7725 /gtk/gtkcssprovider.c
parentb0b6c8ad4b9120bdc30d2fd81d572dfb060f4ed1 (diff)
downloadgtk+-8dbe8c83491c5877c9b19928f257ec7a671cb45e.tar.gz
syleprovider: Add a vfunc to get the changes
This way we can check what changes are even interesting for our matcher.
Diffstat (limited to 'gtk/gtkcssprovider.c')
-rw-r--r--gtk/gtkcssprovider.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c
index 93201007aa..022d408ebd 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -1299,6 +1299,12 @@ gtk_css_ruleset_matches (GtkCssRuleset *ruleset,
return _gtk_css_selector_matches (ruleset->selector, matcher);
}
+static GtkCssChange
+gtk_css_ruleset_get_change (GtkCssRuleset *ruleset)
+{
+ return _gtk_css_selector_get_change (ruleset->selector);
+}
+
static void
gtk_css_scanner_destroy (GtkCssScanner *scanner)
{
@@ -1627,11 +1633,42 @@ gtk_css_style_provider_lookup (GtkStyleProviderPrivate *provider,
}
}
+static GtkCssChange
+gtk_css_style_provider_get_change (GtkStyleProviderPrivate *provider,
+ const GtkCssMatcher *matcher)
+{
+ GtkCssProvider *css_provider;
+ GtkCssProviderPrivate *priv;
+ GtkCssChange change = 0;
+ int i;
+
+ css_provider = GTK_CSS_PROVIDER (provider);
+ priv = css_provider->priv;
+
+ for (i = priv->rulesets->len - 1; i >= 0; i--)
+ {
+ GtkCssRuleset *ruleset;
+
+ ruleset = &g_array_index (priv->rulesets, GtkCssRuleset, i);
+
+ if (ruleset->styles == NULL)
+ continue;
+
+ if (!gtk_css_ruleset_matches (ruleset, matcher))
+ continue;
+
+ change |= gtk_css_ruleset_get_change (ruleset);
+ }
+
+ return change;
+}
+
static void
gtk_css_style_provider_private_iface_init (GtkStyleProviderPrivateInterface *iface)
{
iface->get_color = gtk_css_style_provider_get_color;
iface->lookup = gtk_css_style_provider_lookup;
+ iface->get_change = gtk_css_style_provider_get_change;
}
static void