Browse Source

LibWeb: Clear element.style when the "style" attribute is removed

We were hanging on to element inline style, even after the style
attribute was removed. This made inline style sticky and impossible to
remove. This patch fixes that. :^)
Andreas Kling 3 years ago
parent
commit
2b7775118d
2 changed files with 11 additions and 1 deletions
  1. 10 0
      Userland/Libraries/LibWeb/DOM/Element.cpp
  2. 1 1
      Userland/Libraries/LibWeb/DOM/Element.h

+ 10 - 0
Userland/Libraries/LibWeb/DOM/Element.cpp

@@ -265,6 +265,16 @@ void Element::parse_attribute(const FlyString& name, const String& value)
     }
 }
 
+void Element::did_remove_attribute(FlyString const& name)
+{
+    if (name == HTML::AttributeNames::style) {
+        if (m_inline_style) {
+            m_inline_style = nullptr;
+            set_needs_style_update(true);
+        }
+    }
+}
+
 enum class RequiredInvalidation {
     None,
     RepaintOnly,

+ 1 - 1
Userland/Libraries/LibWeb/DOM/Element.h

@@ -85,7 +85,7 @@ public:
 
     virtual void apply_presentational_hints(CSS::StyleProperties&) const { }
     virtual void parse_attribute(const FlyString& name, const String& value);
-    virtual void did_remove_attribute(FlyString const&) { }
+    virtual void did_remove_attribute(FlyString const&);
 
     enum class NeedsRelayout {
         No = 0,