From 055e955a1c731801f486e5c3d4417bb79d3a0410 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Tue, 5 May 2020 11:48:13 +0100 Subject: [PATCH] LibWeb: Recognise :focus pseudo-class It's still only a dummy as LibWeb doesn't have focused elements yet, but at least now we don't treat "selector:focus" as just "selector". This fixes an issue on google.com which was mostly grey - coming from some menu item focus styles :^) --- Libraries/LibWeb/CSS/Selector.h | 1 + Libraries/LibWeb/CSS/SelectorEngine.cpp | 3 +++ Libraries/LibWeb/Parser/CSSParser.cpp | 2 ++ 3 files changed, 6 insertions(+) diff --git a/Libraries/LibWeb/CSS/Selector.h b/Libraries/LibWeb/CSS/Selector.h index 19ad0ebf4c5..3b6f7c15521 100644 --- a/Libraries/LibWeb/CSS/Selector.h +++ b/Libraries/LibWeb/CSS/Selector.h @@ -48,6 +48,7 @@ public: None, Link, Hover, + Focus, FirstChild, LastChild, OnlyChild, diff --git a/Libraries/LibWeb/CSS/SelectorEngine.cpp b/Libraries/LibWeb/CSS/SelectorEngine.cpp index 3d21f418c24..e2508967845 100644 --- a/Libraries/LibWeb/CSS/SelectorEngine.cpp +++ b/Libraries/LibWeb/CSS/SelectorEngine.cpp @@ -56,6 +56,9 @@ bool matches(const Selector::SimpleSelector& component, const Element& element) if (!matches_hover_pseudo_class(element)) return false; break; + case Selector::SimpleSelector::PseudoClass::Focus: + // FIXME: Implement matches_focus_pseudo_class(element) + return false; case Selector::SimpleSelector::PseudoClass::FirstChild: if (element.previous_element_sibling()) return false; diff --git a/Libraries/LibWeb/Parser/CSSParser.cpp b/Libraries/LibWeb/Parser/CSSParser.cpp index 6958b34c3a2..474ab35c0d4 100644 --- a/Libraries/LibWeb/Parser/CSSParser.cpp +++ b/Libraries/LibWeb/Parser/CSSParser.cpp @@ -385,6 +385,8 @@ public: simple_selector.pseudo_class = Selector::SimpleSelector::PseudoClass::Link; else if (pseudo_name == "hover") simple_selector.pseudo_class = Selector::SimpleSelector::PseudoClass::Hover; + else if (pseudo_name == "focus") + simple_selector.pseudo_class = Selector::SimpleSelector::PseudoClass::Focus; else if (pseudo_name == "first-child") simple_selector.pseudo_class = Selector::SimpleSelector::PseudoClass::FirstChild; else if (pseudo_name == "last-child")