aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/stylesheet_set.rs18
-rw-r--r--ports/geckolib/glue.rs12
2 files changed, 23 insertions, 7 deletions
diff --git a/components/style/stylesheet_set.rs b/components/style/stylesheet_set.rs
index 07ef6fe24b2..f38ff22d535 100644
--- a/components/style/stylesheet_set.rs
+++ b/components/style/stylesheet_set.rs
@@ -125,8 +125,8 @@ where
stylist: &Stylist,
sheet: S,
before_sheet: S,
- guard: &SharedRwLockReadGuard)
- {
+ guard: &SharedRwLockReadGuard
+ ) {
debug!("StylesheetSet::insert_stylesheet_before");
self.remove_stylesheet_if_present(&sheet);
let index = self.entries.iter().position(|entry| {
@@ -142,12 +142,20 @@ where
}
/// Remove a given stylesheet from the set.
- pub fn remove_stylesheet(&mut self, sheet: S) {
+ pub fn remove_stylesheet(
+ &mut self,
+ stylist: &Stylist,
+ sheet: S,
+ guard: &SharedRwLockReadGuard,
+ ) {
debug!("StylesheetSet::remove_stylesheet");
self.remove_stylesheet_if_present(&sheet);
self.dirty = true;
- // FIXME(emilio): We can do better!
- self.invalidations.invalidate_fully();
+ self.invalidations.collect_invalidations_for(
+ stylist,
+ &sheet,
+ guard
+ );
}
/// Notes that the author style has been disabled for this document.
diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs
index 56b7b1a0a4c..7bc71af9fcd 100644
--- a/ports/geckolib/glue.rs
+++ b/ports/geckolib/glue.rs
@@ -877,7 +877,8 @@ pub extern "C" fn Servo_StyleSet_InsertStyleSheetBefore(
&data.stylist,
unsafe { GeckoStyleSheet::new(sheet) },
unsafe { GeckoStyleSheet::new(before_sheet) },
- &guard);
+ &guard,
+ );
data.clear_stylist();
}
@@ -886,8 +887,15 @@ pub extern "C" fn Servo_StyleSet_RemoveStyleSheet(
raw_data: RawServoStyleSetBorrowed,
sheet: *const ServoStyleSheet
) {
+ let global_style_data = &*GLOBAL_STYLE_DATA;
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
- data.stylesheets.remove_stylesheet(unsafe { GeckoStyleSheet::new(sheet) });
+ let mut data = &mut *data;
+ let guard = global_style_data.shared_lock.read();
+ data.stylesheets.remove_stylesheet(
+ &data.stylist,
+ unsafe { GeckoStyleSheet::new(sheet) },
+ &guard,
+ );
data.clear_stylist();
}