From ef0476115d29bd2c736a42fa59b9cbc835acaa07 Mon Sep 17 00:00:00 2001 From: Cameron McCormack Date: Thu, 28 Apr 2016 18:37:51 +1000 Subject: [PATCH] Add Servo_InsertStyleSheetBefore. --- ports/geckolib/bindings.rs | 3 +++ ports/geckolib/glue.rs | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/ports/geckolib/bindings.rs b/ports/geckolib/bindings.rs index 037d55477ca..542ab7a3b0c 100644 --- a/ports/geckolib/bindings.rs +++ b/ports/geckolib/bindings.rs @@ -76,6 +76,9 @@ extern "C" { set: *mut RawServoStyleSet); pub fn Servo_PrependStyleSheet(sheet: *mut RawServoStyleSheet, set: *mut RawServoStyleSet); + pub fn Servo_InsertStyleSheetBefore(sheet: *mut RawServoStyleSheet, + reference: *mut RawServoStyleSheet, + set: *mut RawServoStyleSet); pub fn Servo_RemoveStyleSheet(sheet: *mut RawServoStyleSheet, set: *mut RawServoStyleSet); pub fn Servo_StyleSheetHasRules(sheet: *mut RawServoStyleSheet) -> bool; diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 8a3294afc55..e20ff307d41 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -143,6 +143,22 @@ pub extern "C" fn Servo_PrependStyleSheet(raw_sheet: *mut RawServoStyleSheet, }) } +#[no_mangle] +pub extern "C" fn Servo_InsertStyleSheetBefore(raw_sheet: *mut RawServoStyleSheet, + raw_reference: *mut RawServoStyleSheet, + raw_data: *mut RawServoStyleSet) { + type Helpers = ArcHelpers; + let data = PerDocumentStyleData::borrow_mut_from_raw(raw_data); + Helpers::with(raw_sheet, |sheet| { + Helpers::with(raw_reference, |reference| { + data.stylesheets.retain(|x| !arc_ptr_eq(x, sheet)); + let index = data.stylesheets.iter().position(|x| arc_ptr_eq(x, reference)).unwrap(); + data.stylesheets.insert(index, sheet.clone()); + data.stylesheets_changed = true; + }) + }) +} + #[no_mangle] pub extern "C" fn Servo_RemoveStyleSheet(raw_sheet: *mut RawServoStyleSheet, raw_data: *mut RawServoStyleSet) {