summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-01-15 15:10:06 -0500
committerMatthias Clasen <mclasen@redhat.com>2020-01-15 15:56:05 -0500
commit13e2445adb42cfeca254a46f6bd07c9f4e6a0cc8 (patch)
tree2f571932be6f17629aef32fe48c10daa9e3d63d7
parent67fd975d77443d7fc61eac571edf523e9449716d (diff)
downloadgtk+-wip/matthiasc/css-change.tar.gz
css: Track hover and active state changes separatelywip/matthiasc/css-change
The idea is that this reduce the amount of frequently changing state that css nodes are sensitive to. This is going to reduce the amount of style recomputation.
-rw-r--r--gtk/gtkcssmatcher.c2
-rw-r--r--gtk/gtkcssnode.c16
-rw-r--r--gtk/gtkcssselector.c34
-rw-r--r--gtk/gtkcsstypes.c29
-rw-r--r--gtk/gtkcsstypesprivate.h118
5 files changed, 138 insertions, 61 deletions
diff --git a/gtk/gtkcssmatcher.c b/gtk/gtkcssmatcher.c
index 86448d4618..fd2545ba4f 100644
--- a/gtk/gtkcssmatcher.c
+++ b/gtk/gtkcssmatcher.c
@@ -561,7 +561,7 @@ _gtk_css_matcher_superset_init (GtkCssMatcher *matcher,
GtkCssChange relevant)
{
g_return_if_fail (subset != NULL);
- g_return_if_fail ((relevant & ~(GTK_CSS_CHANGE_CLASS | GTK_CSS_CHANGE_NAME | GTK_CSS_CHANGE_POSITION | GTK_CSS_CHANGE_STATE)) == 0);
+ g_return_if_fail ((relevant & ~(GTK_CSS_CHANGE_CLASS | GTK_CSS_CHANGE_NAME | GTK_CSS_CHANGE_POSITION | GTK_CSS_CHANGE_STATE | GTK_CSS_CHANGE_HOVER)) == 0);
switch (subset->klass->type)
{
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c
index 5b0de1323c..bd90df4bf0 100644
--- a/gtk/gtkcssnode.c
+++ b/gtk/gtkcssnode.c
@@ -1210,9 +1210,23 @@ void
gtk_css_node_set_state (GtkCssNode *cssnode,
GtkStateFlags state_flags)
{
+ GtkStateFlags old_state;
+
+ old_state = gtk_css_node_declaration_get_state (cssnode->decl);
+
if (gtk_css_node_declaration_set_state (&cssnode->decl, state_flags))
{
- gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_STATE);
+ GtkStateFlags states = old_state ^ state_flags;
+ GtkCssChange change = 0;
+
+ if (states & GTK_STATE_FLAG_PRELIGHT)
+ change |= GTK_CSS_CHANGE_HOVER;
+ if (states & GTK_STATE_FLAG_ACTIVE)
+ change |= GTK_CSS_CHANGE_ACTIVE;
+ if (states & ~(GTK_STATE_FLAG_PRELIGHT|GTK_STATE_FLAG_ACTIVE))
+ change |= GTK_CSS_CHANGE_STATE;
+
+ gtk_css_node_invalidate (cssnode, change);
g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_STATE]);
}
}
diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c
index 6ea0ed6dc0..6576fd8586 100644
--- a/gtk/gtkcssselector.c
+++ b/gtk/gtkcssselector.c
@@ -731,6 +731,18 @@ comp_pseudoclass_state (const GtkCssSelector *a,
return a->state.state - b->state.state;
}
+#define GTK_CSS_CHANGE_PSEUDOCLASS_HOVER GTK_CSS_CHANGE_HOVER
+DEFINE_SIMPLE_SELECTOR(pseudoclass_hover, PSEUDOCLASS_HOVER, print_pseudoclass_state,
+ match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state,
+ FALSE, TRUE, FALSE)
+#undef GTK_CSS_CHANGE_PSEUDOCLASS_HOVER
+
+#define GTK_CSS_CHANGE_PSEUDOCLASS_ACTIVE GTK_CSS_CHANGE_ACTIVE
+DEFINE_SIMPLE_SELECTOR(pseudoclass_active, PSEUDOCLASS_ACTIVE, print_pseudoclass_state,
+ match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state,
+ FALSE, TRUE, FALSE)
+#undef GTK_CSS_CHANGE_PSEUDOCLASS_ACTIVE
+
#define GTK_CSS_CHANGE_PSEUDOCLASS_STATE GTK_CSS_CHANGE_STATE
DEFINE_SIMPLE_SELECTOR(pseudoclass_state, PSEUDOCLASS_STATE, print_pseudoclass_state,
match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state,
@@ -1272,8 +1284,6 @@ gtk_css_selector_parse_selector_pseudo_class (GtkCssParser *parser,
{ "first-child", 0, POSITION_FORWARD, 0, 1 },
{ "last-child", 0, POSITION_BACKWARD, 0, 1 },
{ "only-child", 0, POSITION_ONLY, 0, 0 },
- { "active", GTK_STATE_FLAG_ACTIVE, },
- { "hover", GTK_STATE_FLAG_PRELIGHT, },
{ "selected", GTK_STATE_FLAG_SELECTED, },
{ "disabled", GTK_STATE_FLAG_INSENSITIVE, },
{ "indeterminate", GTK_STATE_FLAG_INCONSISTENT, },
@@ -1309,6 +1319,26 @@ gtk_css_selector_parse_selector_pseudo_class (GtkCssParser *parser,
return selector;
}
}
+
+ if (g_ascii_strcasecmp ("hover", token->string.string) == 0)
+ {
+ selector = gtk_css_selector_new (negate ? &GTK_CSS_SELECTOR_NOT_PSEUDOCLASS_HOVER
+ : &GTK_CSS_SELECTOR_PSEUDOCLASS_HOVER,
+ selector);
+ selector->state.state = GTK_STATE_FLAG_PRELIGHT;
+ gtk_css_parser_consume_token (parser);
+ return selector;
+ }
+
+ if (g_ascii_strcasecmp ("active", token->string.string) == 0)
+ {
+ selector = gtk_css_selector_new (negate ? &GTK_CSS_SELECTOR_NOT_PSEUDOCLASS_ACTIVE
+ : &GTK_CSS_SELECTOR_PSEUDOCLASS_ACTIVE,
+ selector);
+ selector->state.state = GTK_STATE_FLAG_ACTIVE;
+ gtk_css_parser_consume_token (parser);
+ return selector;
+ }
gtk_css_parser_error (parser,
GTK_CSS_PARSER_ERROR_UNKNOWN_VALUE,
diff --git a/gtk/gtkcsstypes.c b/gtk/gtkcsstypes.c
index 8bae7c397c..9417e4b342 100644
--- a/gtk/gtkcsstypes.c
+++ b/gtk/gtkcsstypes.c
@@ -74,19 +74,18 @@ _gtk_css_change_for_sibling (GtkCssChange match)
| GTK_CSS_CHANGE_LAST_CHILD \
| GTK_CSS_CHANGE_NTH_CHILD \
| GTK_CSS_CHANGE_NTH_LAST_CHILD \
- | GTK_CSS_CHANGE_STATE )
+ | GTK_CSS_CHANGE_STATE \
+ | GTK_CSS_CHANGE_HOVER \
+ | GTK_CSS_CHANGE_ACTIVE )
#define KEEP_STATES ( ~(BASE_STATES|GTK_CSS_CHANGE_SOURCE|GTK_CSS_CHANGE_PARENT_STYLE) \
| GTK_CSS_CHANGE_NTH_CHILD \
| GTK_CSS_CHANGE_NTH_LAST_CHILD)
-#define SIBLING_SHIFT 8
-
- return (match & KEEP_STATES) | ((match & BASE_STATES) << SIBLING_SHIFT);
+ return (match & KEEP_STATES) | ((match & BASE_STATES) << GTK_CSS_CHANGE_SIBLING_SHIFT);
#undef BASE_STATES
#undef KEEP_STATES
-#undef SIBLING_SHIFT
}
GtkCssChange
@@ -100,6 +99,8 @@ _gtk_css_change_for_child (GtkCssChange match)
| GTK_CSS_CHANGE_NTH_CHILD \
| GTK_CSS_CHANGE_NTH_LAST_CHILD \
| GTK_CSS_CHANGE_STATE \
+ | GTK_CSS_CHANGE_HOVER \
+ | GTK_CSS_CHANGE_ACTIVE \
| GTK_CSS_CHANGE_SIBLING_CLASS \
| GTK_CSS_CHANGE_SIBLING_NAME \
| GTK_CSS_CHANGE_SIBLING_ID \
@@ -107,14 +108,16 @@ _gtk_css_change_for_child (GtkCssChange match)
| GTK_CSS_CHANGE_SIBLING_LAST_CHILD \
| GTK_CSS_CHANGE_SIBLING_NTH_CHILD \
| GTK_CSS_CHANGE_SIBLING_NTH_LAST_CHILD \
- | GTK_CSS_CHANGE_SIBLING_STATE )
+ | GTK_CSS_CHANGE_SIBLING_STATE \
+ | GTK_CSS_CHANGE_SIBLING_HOVER \
+ | GTK_CSS_CHANGE_SIBLING_ACTIVE )
-#define PARENT_SHIFT 16
+#define KEEP_STATES (~(BASE_STATES|GTK_CSS_CHANGE_SOURCE|GTK_CSS_CHANGE_PARENT_STYLE))
- return (match & ~(BASE_STATES|GTK_CSS_CHANGE_SOURCE|GTK_CSS_CHANGE_PARENT_STYLE)) | ((match & BASE_STATES) << PARENT_SHIFT);
+ return (match & KEEP_STATES) | ((match & BASE_STATES) << GTK_CSS_CHANGE_PARENT_SHIFT);
#undef BASE_STATES
-#undef PARENT_SHIFT
+#undef KEEP_STATES
}
void
@@ -133,6 +136,8 @@ gtk_css_change_print (GtkCssChange change,
{ GTK_CSS_CHANGE_NTH_CHILD, "nth-child" },
{ GTK_CSS_CHANGE_NTH_LAST_CHILD, "nth-last-child" },
{ GTK_CSS_CHANGE_STATE, "state" },
+ { GTK_CSS_CHANGE_HOVER, "hover" },
+ { GTK_CSS_CHANGE_ACTIVE, "active" },
{ GTK_CSS_CHANGE_SIBLING_CLASS, "sibling-class" },
{ GTK_CSS_CHANGE_SIBLING_NAME, "sibling-name" },
{ GTK_CSS_CHANGE_SIBLING_ID, "sibling-id" },
@@ -141,6 +146,8 @@ gtk_css_change_print (GtkCssChange change,
{ GTK_CSS_CHANGE_SIBLING_NTH_CHILD, "sibling-nth-child" },
{ GTK_CSS_CHANGE_SIBLING_NTH_LAST_CHILD, "sibling-nth-last-child" },
{ GTK_CSS_CHANGE_SIBLING_STATE, "sibling-state" },
+ { GTK_CSS_CHANGE_SIBLING_HOVER, "sibling-hover" },
+ { GTK_CSS_CHANGE_SIBLING_ACTIVE, "sibling-active" },
{ GTK_CSS_CHANGE_PARENT_CLASS, "parent-class" },
{ GTK_CSS_CHANGE_PARENT_NAME, "parent-name" },
{ GTK_CSS_CHANGE_PARENT_ID, "parent-id" },
@@ -149,6 +156,8 @@ gtk_css_change_print (GtkCssChange change,
{ GTK_CSS_CHANGE_PARENT_NTH_CHILD, "parent-nth-child" },
{ GTK_CSS_CHANGE_PARENT_NTH_LAST_CHILD, "parent-nth-last-child" },
{ GTK_CSS_CHANGE_PARENT_STATE, "parent-state" },
+ { GTK_CSS_CHANGE_PARENT_HOVER, "parent-hover" },
+ { GTK_CSS_CHANGE_PARENT_ACTIVE, "parent-active" },
{ GTK_CSS_CHANGE_PARENT_SIBLING_CLASS, "parent-sibling-" },
{ GTK_CSS_CHANGE_PARENT_SIBLING_NAME, "parent-sibling-name" },
{ GTK_CSS_CHANGE_PARENT_SIBLING_ID, "parent-sibling-id" },
@@ -157,6 +166,8 @@ gtk_css_change_print (GtkCssChange change,
{ GTK_CSS_CHANGE_PARENT_SIBLING_NTH_CHILD, "parent-sibling-nth-child" },
{ GTK_CSS_CHANGE_PARENT_SIBLING_NTH_LAST_CHILD, "parent-sibling-nth-last-child" },
{ GTK_CSS_CHANGE_PARENT_SIBLING_STATE, "parent-sibling-state" },
+ { GTK_CSS_CHANGE_PARENT_SIBLING_HOVER, "parent-sibling-hover" },
+ { GTK_CSS_CHANGE_PARENT_SIBLING_ACTIVE, "parent-sibling-active" },
{ GTK_CSS_CHANGE_SOURCE, "source" },
{ GTK_CSS_CHANGE_PARENT_STYLE, "parent-style" },
{ GTK_CSS_CHANGE_TIMESTAMP, "timestamp" },
diff --git a/gtk/gtkcsstypesprivate.h b/gtk/gtkcsstypesprivate.h
index 573a17173f..0044b239af 100644
--- a/gtk/gtkcsstypesprivate.h
+++ b/gtk/gtkcsstypesprivate.h
@@ -36,61 +36,83 @@ typedef struct _GtkCssStyle GtkCssStyle;
#define GTK_CSS_CHANGE_NTH_CHILD (1ULL << 5)
#define GTK_CSS_CHANGE_NTH_LAST_CHILD (1ULL << 6)
#define GTK_CSS_CHANGE_STATE (1ULL << 7)
-#define GTK_CSS_CHANGE_SIBLING_CLASS (1ULL << 8)
-#define GTK_CSS_CHANGE_SIBLING_NAME (1ULL << 9)
-#define GTK_CSS_CHANGE_SIBLING_ID (1ULL << 10)
-#define GTK_CSS_CHANGE_SIBLING_FIRST_CHILD (1ULL << 11)
-#define GTK_CSS_CHANGE_SIBLING_LAST_CHILD (1ULL << 12)
-#define GTK_CSS_CHANGE_SIBLING_NTH_CHILD (1ULL << 13)
-#define GTK_CSS_CHANGE_SIBLING_NTH_LAST_CHILD (1ULL << 14)
-#define GTK_CSS_CHANGE_SIBLING_STATE (1ULL << 15)
-#define GTK_CSS_CHANGE_PARENT_CLASS (1ULL << 16)
-#define GTK_CSS_CHANGE_PARENT_NAME (1ULL << 17)
-#define GTK_CSS_CHANGE_PARENT_ID (1ULL << 18)
-#define GTK_CSS_CHANGE_PARENT_FIRST_CHILD (1ULL << 19)
-#define GTK_CSS_CHANGE_PARENT_LAST_CHILD (1ULL << 20)
-#define GTK_CSS_CHANGE_PARENT_NTH_CHILD (1ULL << 21)
-#define GTK_CSS_CHANGE_PARENT_NTH_LAST_CHILD (1ULL << 22)
-#define GTK_CSS_CHANGE_PARENT_STATE (1ULL << 23)
-#define GTK_CSS_CHANGE_PARENT_SIBLING_CLASS (1ULL << 24)
-#define GTK_CSS_CHANGE_PARENT_SIBLING_ID (1ULL << 25)
-#define GTK_CSS_CHANGE_PARENT_SIBLING_NAME (1ULL << 26)
-#define GTK_CSS_CHANGE_PARENT_SIBLING_FIRST_CHILD (1ULL << 27)
-#define GTK_CSS_CHANGE_PARENT_SIBLING_LAST_CHILD (1ULL << 28)
-#define GTK_CSS_CHANGE_PARENT_SIBLING_NTH_CHILD (1ULL << 29)
-#define GTK_CSS_CHANGE_PARENT_SIBLING_NTH_LAST_CHILD (1ULL << 30)
-#define GTK_CSS_CHANGE_PARENT_SIBLING_STATE (1ULL << 31)
+#define GTK_CSS_CHANGE_HOVER (1ULL << 8)
+#define GTK_CSS_CHANGE_ACTIVE (1ULL << 9)
+
+#define GTK_CSS_CHANGE_SIBLING_SHIFT 10
+
+#define GTK_CSS_CHANGE_SIBLING_CLASS (1ULL << 10)
+#define GTK_CSS_CHANGE_SIBLING_NAME (1ULL << 11)
+#define GTK_CSS_CHANGE_SIBLING_ID (1ULL << 12)
+#define GTK_CSS_CHANGE_SIBLING_FIRST_CHILD (1ULL << 13)
+#define GTK_CSS_CHANGE_SIBLING_LAST_CHILD (1ULL << 14)
+#define GTK_CSS_CHANGE_SIBLING_NTH_CHILD (1ULL << 15)
+#define GTK_CSS_CHANGE_SIBLING_NTH_LAST_CHILD (1ULL << 16)
+#define GTK_CSS_CHANGE_SIBLING_STATE (1ULL << 17)
+#define GTK_CSS_CHANGE_SIBLING_HOVER (1ULL << 18)
+#define GTK_CSS_CHANGE_SIBLING_ACTIVE (1ULL << 19)
+
+#define GTK_CSS_CHANGE_PARENT_SHIFT (GTK_CSS_CHANGE_SIBLING_SHIFT + GTK_CSS_CHANGE_SIBLING_SHIFT)
+
+#define GTK_CSS_CHANGE_PARENT_CLASS (1ULL << 20)
+#define GTK_CSS_CHANGE_PARENT_NAME (1ULL << 21)
+#define GTK_CSS_CHANGE_PARENT_ID (1ULL << 22)
+#define GTK_CSS_CHANGE_PARENT_FIRST_CHILD (1ULL << 23)
+#define GTK_CSS_CHANGE_PARENT_LAST_CHILD (1ULL << 24)
+#define GTK_CSS_CHANGE_PARENT_NTH_CHILD (1ULL << 25)
+#define GTK_CSS_CHANGE_PARENT_NTH_LAST_CHILD (1ULL << 26)
+#define GTK_CSS_CHANGE_PARENT_STATE (1ULL << 27)
+#define GTK_CSS_CHANGE_PARENT_HOVER (1ULL << 28)
+#define GTK_CSS_CHANGE_PARENT_ACTIVE (1ULL << 29)
+
+#define GTK_CSS_CHANGE_PARENT_SIBLING_SHIFT (GTK_CSS_CHANGE_PARENT_SHIFT + GTK_CSS_CHANGE_SIBLING_SHIFT)
+
+#define GTK_CSS_CHANGE_PARENT_SIBLING_CLASS (1ULL << 30)
+#define GTK_CSS_CHANGE_PARENT_SIBLING_ID (1ULL << 31)
+#define GTK_CSS_CHANGE_PARENT_SIBLING_NAME (1ULL << 32)
+#define GTK_CSS_CHANGE_PARENT_SIBLING_FIRST_CHILD (1ULL << 33)
+#define GTK_CSS_CHANGE_PARENT_SIBLING_LAST_CHILD (1ULL << 34)
+#define GTK_CSS_CHANGE_PARENT_SIBLING_NTH_CHILD (1ULL << 35)
+#define GTK_CSS_CHANGE_PARENT_SIBLING_NTH_LAST_CHILD (1ULL << 36)
+#define GTK_CSS_CHANGE_PARENT_SIBLING_STATE (1ULL << 37)
+#define GTK_CSS_CHANGE_PARENT_SIBLING_HOVER (1ULL << 38)
+#define GTK_CSS_CHANGE_PARENT_SIBLING_ACTIVE (1ULL << 39)
/* add more */
-#define GTK_CSS_CHANGE_SOURCE (1ULL << 32)
-#define GTK_CSS_CHANGE_PARENT_STYLE (1ULL << 33)
-#define GTK_CSS_CHANGE_TIMESTAMP (1ULL << 34)
-#define GTK_CSS_CHANGE_ANIMATIONS (1ULL << 35)
+#define GTK_CSS_CHANGE_SOURCE (1ULL << 40)
+#define GTK_CSS_CHANGE_PARENT_STYLE (1ULL << 41)
+#define GTK_CSS_CHANGE_TIMESTAMP (1ULL << 42)
+#define GTK_CSS_CHANGE_ANIMATIONS (1ULL << 43)
#define GTK_CSS_CHANGE_RESERVED_BIT (1ULL << 62) /* Used internally in gtkcssselector.c */
typedef guint64 GtkCssChange;
-#define GTK_CSS_CHANGE_POSITION (GTK_CSS_CHANGE_FIRST_CHILD | GTK_CSS_CHANGE_LAST_CHILD | \
- GTK_CSS_CHANGE_NTH_CHILD | GTK_CSS_CHANGE_NTH_LAST_CHILD)
-#define GTK_CSS_CHANGE_SIBLING_POSITION (GTK_CSS_CHANGE_SIBLING_FIRST_CHILD | GTK_CSS_CHANGE_SIBLING_LAST_CHILD | \
- GTK_CSS_CHANGE_SIBLING_NTH_CHILD | GTK_CSS_CHANGE_SIBLING_NTH_LAST_CHILD)
-#define GTK_CSS_CHANGE_PARENT_POSITION (GTK_CSS_CHANGE_PARENT_FIRST_CHILD | GTK_CSS_CHANGE_PARENT_LAST_CHILD | \
- GTK_CSS_CHANGE_PARENT_NTH_CHILD | GTK_CSS_CHANGE_PARENT_NTH_LAST_CHILD)
-#define GTK_CSS_CHANGE_PARENT_SIBLING_POSITION (GTK_CSS_CHANGE_PARENT_SIBLING_FIRST_CHILD | GTK_CSS_CHANGE_PARENT_SIBLING_LAST_CHILD | \
- GTK_CSS_CHANGE_PARENT_SIBLING_NTH_CHILD | GTK_CSS_CHANGE_PARENT_SIBLING_NTH_LAST_CHILD)
-
-
-#define GTK_CSS_CHANGE_ANY ((1 << 19) - 1)
-#define GTK_CSS_CHANGE_ANY_SELF (GTK_CSS_CHANGE_CLASS | GTK_CSS_CHANGE_NAME | GTK_CSS_CHANGE_ID | GTK_CSS_CHANGE_POSITION | GTK_CSS_CHANGE_STATE)
-#define GTK_CSS_CHANGE_ANY_SIBLING (GTK_CSS_CHANGE_SIBLING_CLASS | GTK_CSS_CHANGE_SIBLING_NAME | \
- GTK_CSS_CHANGE_SIBLING_ID | \
- GTK_CSS_CHANGE_SIBLING_POSITION | GTK_CSS_CHANGE_SIBLING_STATE)
-#define GTK_CSS_CHANGE_ANY_PARENT (GTK_CSS_CHANGE_PARENT_CLASS | GTK_CSS_CHANGE_PARENT_SIBLING_CLASS | \
- GTK_CSS_CHANGE_PARENT_NAME | GTK_CSS_CHANGE_PARENT_SIBLING_NAME | \
- GTK_CSS_CHANGE_PARENT_ID | GTK_CSS_CHANGE_PARENT_SIBLING_ID | \
- GTK_CSS_CHANGE_PARENT_POSITION | GTK_CSS_CHANGE_PARENT_SIBLING_POSITION | \
- GTK_CSS_CHANGE_PARENT_STATE | GTK_CSS_CHANGE_PARENT_SIBLING_STATE)
+#define GTK_CSS_CHANGE_POSITION (GTK_CSS_CHANGE_FIRST_CHILD | \
+ GTK_CSS_CHANGE_LAST_CHILD | \
+ GTK_CSS_CHANGE_NTH_CHILD | \
+ GTK_CSS_CHANGE_NTH_LAST_CHILD)
+#define GTK_CSS_CHANGE_SIBLING_POSITION (GTK_CSS_CHANGE_POSITION << GTK_CSS_CHANGE_SIBLING_SHIFT)
+
+#define GTK_CSS_CHANGE_ANY_SELF (GTK_CSS_CHANGE_CLASS | \
+ GTK_CSS_CHANGE_NAME | \
+ GTK_CSS_CHANGE_ID | \
+ GTK_CSS_CHANGE_POSITION | \
+ GTK_CSS_CHANGE_STATE | \
+ GTK_CSS_CHANGE_HOVER | \
+ GTK_CSS_CHANGE_ACTIVE)
+#define GTK_CSS_CHANGE_ANY_SIBLING (GTK_CSS_CHANGE_ANY_SELF << GTK_CSS_CHANGE_SIBLING_SHIFT)
+#define GTK_CSS_CHANGE_ANY_PARENT (GTK_CSS_CHANGE_ANY_SELF << GTK_CSS_CHANGE_PARENT_SHIFT)
+#define GTK_CSS_CHANGE_ANY_PARENT_SIBLING (GTK_CSS_CHANGE_ANY_SELF << GTK_CSS_CHANGE_PARENT_SIBLING_SHIFT)
+
+#define GTK_CSS_CHANGE_ANY (GTK_CSS_CHANGE_ANY_SELF | \
+ GTK_CSS_CHANGE_ANY_SIBLING | \
+ GTK_CSS_CHANGE_ANY_PARENT | \
+ GTK_CSS_CHANGE_ANY_PARENT_SIBLING | \
+ GTK_CSS_CHANGE_SOURCE | \
+ GTK_CSS_CHANGE_PARENT_STYLE | \
+ GTK_CSS_CHANGE_TIMESTAMP | \
+ GTK_CSS_CHANGE_ANIMATIONS)
/*
* GtkCssAffects: