diff --git a/Libraries/LibWeb/HTML/HTMLDialogElement.cpp b/Libraries/LibWeb/HTML/HTMLDialogElement.cpp
index d2fe4534011..01ac0867cf9 100644
--- a/Libraries/LibWeb/HTML/HTMLDialogElement.cpp
+++ b/Libraries/LibWeb/HTML/HTMLDialogElement.cpp
@@ -223,7 +223,7 @@ WebIDL::ExceptionOr HTMLDialogElement::show_a_modal_dialog(HTMLDialogEleme
TRY(subject.set_attribute(AttributeNames::open, {}));
// 12. Set is modal of subject to true.
- subject.m_is_modal = true;
+ subject.set_is_modal(true);
// FIXME: 13. Assert: subject's node document's open dialogs list does not contain subject.
// FIXME: 14. Add subject to subject's node document's open dialogs list.
@@ -338,7 +338,7 @@ void HTMLDialogElement::close_the_dialog(Optional result)
// FIXME: 7. Let wasModal be the value of subject's is modal flag.
// 8. Set the is modal flag of subject to false.
- m_is_modal = false;
+ set_is_modal(false);
// FIXME: 9. Remove subject from subject's node document's open dialogs list.
@@ -435,4 +435,12 @@ void HTMLDialogElement::run_dialog_focusing_steps()
// FIXME: 10. Set topDocument's autofocus processed flag to true.
}
+void HTMLDialogElement::set_is_modal(bool is_modal)
+{
+ if (m_is_modal == is_modal)
+ return;
+ m_is_modal = is_modal;
+ invalidate_style(DOM::StyleInvalidationReason::NodeRemove);
+}
+
}
diff --git a/Libraries/LibWeb/HTML/HTMLDialogElement.h b/Libraries/LibWeb/HTML/HTMLDialogElement.h
index 3c8eb41f2a4..02e471e980b 100644
--- a/Libraries/LibWeb/HTML/HTMLDialogElement.h
+++ b/Libraries/LibWeb/HTML/HTMLDialogElement.h
@@ -37,6 +37,7 @@ public:
virtual Optional default_role() const override { return ARIA::Role::dialog; }
bool is_modal() const { return m_is_modal; }
+ void set_is_modal(bool);
private:
HTMLDialogElement(DOM::Document&, DOM::QualifiedName);