From 6ccdf7d19fe49861deb5130c58337a2e2526e105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20W=C3=BClker?= Date: Fri, 21 Feb 2025 15:42:28 +0100 Subject: [PATCH] Allow resetting multiple flags at once in Element::set_state (#35580) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, the code would incorrectly return without updating the flags if the caller tried to reset multiple flags at once and the not all of them were true. Signed-off-by: Simon Wülker --- components/script/dom/element.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 3603ab5a24a..3abc82e31a3 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -4307,16 +4307,20 @@ impl Element { pub(crate) fn set_state(&self, which: ElementState, value: bool) { let mut state = self.state.get(); - if state.contains(which) == value { - return; - } - let node = self.upcast::(); - node.owner_doc().element_state_will_change(self); + let previous_state = state; if value { state.insert(which); } else { state.remove(which); } + + if previous_state == state { + // Nothing to do + return; + } + + let node = self.upcast::(); + node.owner_doc().element_state_will_change(self); self.state.set(state); }