diff options
author | Simon Wülker <simon.wuelker@arcor.de> | 2025-02-21 15:42:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-21 14:42:28 +0000 |
commit | 6ccdf7d19fe49861deb5130c58337a2e2526e105 (patch) | |
tree | 9fad2f642affad6fece1aec9fcee1ba11f9abd9f /components/script/dom/element.rs | |
parent | cf2b93f18a1c47da866d832e87789e4ce18d5f36 (diff) | |
download | servo-6ccdf7d19fe49861deb5130c58337a2e2526e105.tar.gz servo-6ccdf7d19fe49861deb5130c58337a2e2526e105.zip |
Allow resetting multiple flags at once in Element::set_state (#35580)
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 <simon.wuelker@arcor.de>
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r-- | components/script/dom/element.rs | 14 |
1 files 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>(); - 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>(); + node.owner_doc().element_state_will_change(self); self.state.set(state); } |