diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-01-15 20:27:12 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-01-16 07:24:04 -0500 |
commit | d14bace6d0d9505b28c153ab629ca455d97a9fd2 (patch) | |
tree | bc039ca6ac4a9c07451b9fac048d43b17a2ee73a /gtk/gtkcssselector.c | |
parent | 77f71448d543d39954d776d3b93322d376f34617 (diff) | |
download | gtk+-matthiasc/css-change.tar.gz |
css: Track selected state separatelymatthiasc/css-change
Like the previous change, this reduces the number of
css nodes reacting to parent-state changes. The remaining
parent-state cases here are due to :link.
Before (numbers from widget-factory with Adwaita):
2247 nodes
class 612
name 2246
id 2
first-child 148
last-child 156
state 2245
hover 562
disabled 859
backdrop 1080
sibling-name 63
sibling-disabled 51
parent-class 586
parent-name 788
parent-id 2
parent-first-child 78
parent-last-child 78
parent-state 236
parent-hover 5
parent-disabled 91
parent-backdrop 4
After:
2247 nodes
class 612
name 2246
id 2
first-child 148
last-child 156
state 2245
hover 562
disabled 859
backdrop 1080
selected 579
sibling-name 63
sibling-disabled 51
parent-class 586
parent-name 788
parent-id 2
parent-first-child 78
parent-last-child 78
parent-state 115
parent-hover 5
parent-disabled 91
parent-backdrop 4
parent-selected 144
Diffstat (limited to 'gtk/gtkcssselector.c')
-rw-r--r-- | gtk/gtkcssselector.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c index 3bd1e8044b..8c6465985c 100644 --- a/gtk/gtkcssselector.c +++ b/gtk/gtkcssselector.c @@ -748,6 +748,12 @@ DEFINE_SIMPLE_SELECTOR(pseudoclass_backdrop, PSEUDOCLASS_BACKDROP, print_pseudoc FALSE, TRUE, FALSE) #undef GTK_CSS_CHANGE_PSEUDOCLASS_BACKDROP +#define GTK_CSS_CHANGE_PSEUDOCLASS_SELECTED GTK_CSS_CHANGE_SELECTED +DEFINE_SIMPLE_SELECTOR(pseudoclass_selected, PSEUDOCLASS_SELECTED, print_pseudoclass_state, + match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state, + FALSE, TRUE, FALSE) +#undef GTK_CSS_CHANGE_PSEUDOCLASS_SELECTED + #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, @@ -1320,6 +1326,10 @@ gtk_css_selector_parse_selector_pseudo_class (GtkCssParser *parser, selector = gtk_css_selector_new (negate ? >K_CSS_SELECTOR_NOT_PSEUDOCLASS_BACKDROP : >K_CSS_SELECTOR_PSEUDOCLASS_BACKDROP, selector); + else if (pseudo_classes[i].state_flag == GTK_STATE_FLAG_SELECTED) + selector = gtk_css_selector_new (negate ? >K_CSS_SELECTOR_NOT_PSEUDOCLASS_SELECTED + : >K_CSS_SELECTOR_PSEUDOCLASS_SELECTED, + selector); else selector = gtk_css_selector_new (negate ? >K_CSS_SELECTOR_NOT_PSEUDOCLASS_STATE : >K_CSS_SELECTOR_PSEUDOCLASS_STATE, |