Propagate dirty bits after invalidation if needed.

This commit is contained in:
Wei-Cheng Pan 2017-08-28 18:41:07 +08:00
parent c98b362e65
commit 22ace048cb
3 changed files with 73 additions and 20 deletions

View file

@ -3719,6 +3719,17 @@ pub extern "C" fn Servo_ProcessInvalidations(set: RawServoStyleSetBorrowed,
let mut data = data.as_mut().map(|d| &mut **d);
if let Some(ref mut data) = data {
data.invalidate_style_if_needed(element, &shared_style_context, None);
let result = data.invalidate_style_if_needed(element, &shared_style_context, None);
if result.has_invalidated_siblings() {
let parent = element.traversal_parent().expect("How could we invalidate siblings without a common parent?");
unsafe {
parent.set_dirty_descendants();
bindings::Gecko_NoteDirtySubtreeForInvalidation(parent.0);
}
} else if result.has_invalidated_descendants() {
unsafe { bindings::Gecko_NoteDirtySubtreeForInvalidation(element.0) };
} else if result.has_invalidated_self() {
unsafe { bindings::Gecko_NoteDirtyElement(element.0) };
}
}
}