aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/element.rs
diff options
context:
space:
mode:
authorSimon Wülker <simon.wuelker@arcor.de>2025-02-21 15:42:28 +0100
committerGitHub <noreply@github.com>2025-02-21 14:42:28 +0000
commit6ccdf7d19fe49861deb5130c58337a2e2526e105 (patch)
tree9fad2f642affad6fece1aec9fcee1ba11f9abd9f /components/script/dom/element.rs
parentcf2b93f18a1c47da866d832e87789e4ce18d5f36 (diff)
downloadservo-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.rs14
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);
}