diff options
-rw-r--r-- | ports/geckolib/bindings.rs | 12 | ||||
-rw-r--r-- | ports/geckolib/wrapper.rs | 34 |
2 files changed, 37 insertions, 9 deletions
diff --git a/ports/geckolib/bindings.rs b/ports/geckolib/bindings.rs index 34d7b26e540..845cca32e13 100644 --- a/ports/geckolib/bindings.rs +++ b/ports/geckolib/bindings.rs @@ -69,6 +69,16 @@ extern "C" { pub fn Gecko_GetLastChild(node: *mut RawGeckoNode) -> *mut RawGeckoNode; pub fn Gecko_GetPrevSibling(node: *mut RawGeckoNode) -> *mut RawGeckoNode; pub fn Gecko_GetNextSibling(node: *mut RawGeckoNode) -> *mut RawGeckoNode; + pub fn Gecko_GetParentElement(element: *mut RawGeckoElement) + -> *mut RawGeckoElement; + pub fn Gecko_GetFirstChildElement(element: *mut RawGeckoElement) + -> *mut RawGeckoElement; + pub fn Gecko_GetLastChildElement(element: *mut RawGeckoElement) + -> *mut RawGeckoElement; + pub fn Gecko_GetPrevSiblingElement(element: *mut RawGeckoElement) + -> *mut RawGeckoElement; + pub fn Gecko_GetNextSiblingElement(element: *mut RawGeckoElement) + -> *mut RawGeckoElement; pub fn Gecko_GetNodeData(node: *mut RawGeckoNode) -> *mut ServoNodeData; pub fn Gecko_GetParentNode(node: *mut RawGeckoNode) -> *mut RawGeckoNode; pub fn Gecko_LocalName(element: *mut RawGeckoElement, @@ -81,6 +91,8 @@ extern "C" { -> ::libc::c_int; pub fn Gecko_IsUnvisitedLink(element: *mut RawGeckoElement) -> ::libc::c_int; + pub fn Gecko_IsRootElement(element: *mut RawGeckoElement) + -> ::libc::c_int; pub fn Gecko_Namespace(element: *mut RawGeckoElement, length: *mut uint32_t) -> *const uint16_t; pub fn Gecko_NodeIsElement(node: *mut RawGeckoNode) -> ::libc::c_int; diff --git a/ports/geckolib/wrapper.rs b/ports/geckolib/wrapper.rs index 054929cea62..03c436f7d28 100644 --- a/ports/geckolib/wrapper.rs +++ b/ports/geckolib/wrapper.rs @@ -6,9 +6,13 @@ use bindings::{Gecko_ChildrenCount}; use bindings::{Gecko_ElementState, Gecko_GetAttrAsUTF8, Gecko_GetDocumentElement}; -use bindings::{Gecko_GetFirstChild, Gecko_GetLastChild, Gecko_GetNodeData}; -use bindings::{Gecko_GetParentNode, Gecko_GetPrevSibling, Gecko_GetNextSibling}; -use bindings::{Gecko_IsHTMLElementInHTMLDocument, Gecko_IsLink, Gecko_IsTextNode}; +use bindings::{Gecko_GetFirstChild, Gecko_GetFirstChildElement}; +use bindings::{Gecko_GetLastChild, Gecko_GetLastChildElement}; +use bindings::{Gecko_GetNextSibling, Gecko_GetNextSiblingElement}; +use bindings::{Gecko_GetNodeData}; +use bindings::{Gecko_GetParentElement, Gecko_GetParentNode}; +use bindings::{Gecko_GetPrevSibling, Gecko_GetPrevSiblingElement}; +use bindings::{Gecko_IsHTMLElementInHTMLDocument, Gecko_IsLink, Gecko_IsRootElement, Gecko_IsTextNode}; use bindings::{Gecko_IsUnvisitedLink, Gecko_IsVisitedLink}; #[allow(unused_imports)] // Used in commented-out code. use bindings::{Gecko_LocalName, Gecko_Namespace, Gecko_NodeIsElement, Gecko_SetNodeData}; @@ -356,27 +360,39 @@ impl<'le> ::selectors::Element for GeckoElement<'le> { type Impl = ServoSelectorImpl; fn parent_element(&self) -> Option<Self> { - unimplemented!() + unsafe { + Gecko_GetParentElement(self.element).as_ref().map(|el| GeckoElement::from_ref(el)) + } } fn first_child_element(&self) -> Option<Self> { - unimplemented!() + unsafe { + Gecko_GetFirstChildElement(self.element).as_ref().map(|el| GeckoElement::from_ref(el)) + } } fn last_child_element(&self) -> Option<Self> { - unimplemented!() + unsafe { + Gecko_GetLastChildElement(self.element).as_ref().map(|el| GeckoElement::from_ref(el)) + } } fn prev_sibling_element(&self) -> Option<Self> { - unimplemented!() + unsafe { + Gecko_GetPrevSiblingElement(self.element).as_ref().map(|el| GeckoElement::from_ref(el)) + } } fn next_sibling_element(&self) -> Option<Self> { - unimplemented!() + unsafe { + Gecko_GetNextSiblingElement(self.element).as_ref().map(|el| GeckoElement::from_ref(el)) + } } fn is_root(&self) -> bool { - unimplemented!() + unsafe { + Gecko_IsRootElement(self.element) != 0 + } } fn is_empty(&self) -> bool { |