script: Update rust-selectors to get :active support.

I couldn't find the place in the spec where the precise behavior of
`:active` is described, so I don't set it. However, all the machinery to
keep track of its status is in place.

Improves YouTube.
This commit is contained in:
Patrick Walton 2015-08-17 17:52:21 -07:00
parent f4b526cfb4
commit 6567c269cf
6 changed files with 35 additions and 3 deletions

View file

@ -1754,6 +1754,10 @@ impl<'a> ::selectors::Element for Root<Element> {
let node = NodeCast::from_ref(&**self);
node.get_hover_state()
}
fn get_active_state(&self) -> bool {
let node = NodeCast::from_ref(&**self);
node.get_active_state()
}
fn get_focus_state(&self) -> bool {
// TODO: Also check whether the top-level browsing context has the system focus,
// and whether this element is a browsing context container.

View file

@ -170,6 +170,8 @@ bitflags! {
#[doc = "Specifies whether this node is focusable and whether it is supposed \
to be reachable with using sequential focus navigation."]
const SEQUENTIALLY_FOCUSABLE = 0x400,
#[doc = "Specifies whether this node is active."]
const IN_ACTIVE_STATE = 0x800,
}
}
@ -458,6 +460,9 @@ pub trait NodeHelpers {
fn get_focus_state(self) -> bool;
fn set_focus_state(self, state: bool);
fn get_active_state(self) -> bool;
fn set_active_state(self, state: bool);
fn get_disabled_state(self) -> bool;
fn set_disabled_state(self, state: bool);
@ -635,6 +640,15 @@ impl<'a> NodeHelpers for &'a Node {
self.dirty(NodeDamage::NodeStyleDamaged);
}
fn get_active_state(self) -> bool {
self.get_flag(IN_ACTIVE_STATE)
}
fn set_active_state(self, state: bool) {
self.set_flag(IN_ACTIVE_STATE, state);
self.dirty(NodeDamage::NodeStyleDamaged);
}
fn get_disabled_state(self) -> bool {
self.get_flag(IN_DISABLED_STATE)
}
@ -1115,6 +1129,7 @@ pub trait LayoutNodeHelpers {
fn get_hover_state_for_layout(&self) -> bool;
fn get_focus_state_for_layout(&self) -> bool;
fn get_active_state_for_layout(&self) -> bool;
fn get_disabled_state_for_layout(&self) -> bool;
fn get_enabled_state_for_layout(&self) -> bool;
}
@ -1229,6 +1244,13 @@ impl LayoutNodeHelpers for LayoutJS<Node> {
}
#[inline]
#[allow(unsafe_code)]
fn get_active_state_for_layout(&self) -> bool {
unsafe {
self.get_flag(IN_ACTIVE_STATE)
}
}
#[inline]
#[allow(unsafe_code)]
fn get_disabled_state_for_layout(&self) -> bool {
unsafe {
self.get_flag(IN_DISABLED_STATE)