diff --git a/content/events/public/nsIEventStateManager.h b/content/events/public/nsIEventStateManager.h index 0c39c4ad2c6e..54e5fe7d71cb 100644 --- a/content/events/public/nsIEventStateManager.h +++ b/content/events/public/nsIEventStateManager.h @@ -139,12 +139,17 @@ public: NS_IMETHOD ShiftFocus(PRBool aDirection, nsIContent* aStart)=0; }; -#define NS_EVENT_STATE_ACTIVE 0x0001 // mouse is down on content -#define NS_EVENT_STATE_FOCUS 0x0002 // content has focus -#define NS_EVENT_STATE_HOVER 0x0004 // mouse is hovering over content -#define NS_EVENT_STATE_DRAGOVER 0x0008 // drag is hovering over content -#define NS_EVENT_STATE_URLTARGET 0x0010 // content is URL's target (ref) +#define NS_EVENT_STATE_ACTIVE 0x00000001 // mouse is down on content +#define NS_EVENT_STATE_FOCUS 0x00000002 // content has focus +#define NS_EVENT_STATE_HOVER 0x00000004 // mouse is hovering over content +#define NS_EVENT_STATE_DRAGOVER 0x00000008 // drag is hovering over content +#define NS_EVENT_STATE_URLTARGET 0x00000010 // content is URL's target (ref) + // The following states are used only for ContentStatesChanged -#define NS_EVENT_STATE_CHECKED 0x0020 +// CSS 3 Selectors +#define NS_EVENT_STATE_CHECKED 0x00000020 +// CSS 3 UI +#define NS_EVENT_STATE_REQUIRED 0x00000040 +#define NS_EVENT_STATE_OPTIONAL 0x00000080 #endif // nsIEventStateManager_h__ diff --git a/layout/style/nsCSSPseudoClassList.h b/layout/style/nsCSSPseudoClassList.h index d914facc3fb8..158d7dcd1761 100644 --- a/layout/style/nsCSSPseudoClassList.h +++ b/layout/style/nsCSSPseudoClassList.h @@ -76,3 +76,7 @@ CSS_PSEUDO_CLASS(lastChild, ":last-child") CSS_PSEUDO_CLASS(lastNode, ":-moz-last-node") CSS_PSEUDO_CLASS(onlyChild, ":only-child") +// CSS 3 UI +// http://www.w3.org/TR/2004/CR-css3-ui-20040511/#pseudo-classes +CSS_PSEUDO_CLASS(required, ":required") +CSS_PSEUDO_CLASS(optional, ":optional") diff --git a/layout/style/nsCSSStyleSheet.cpp b/layout/style/nsCSSStyleSheet.cpp index 93c7b307d922..1ca46ac4bd63 100644 --- a/layout/style/nsCSSStyleSheet.cpp +++ b/layout/style/nsCSSStyleSheet.cpp @@ -3125,6 +3125,12 @@ static PRBool SelectorMatches(RuleProcessorData &data, // result = STATE_CHECK(NS_EVENT_STATE_CHECKED); } + else if (nsCSSPseudoClasses::required == pseudoClass->mAtom) { + result = STATE_CHECK(NS_EVENT_STATE_REQUIRED); + } + else if (nsCSSPseudoClasses::optional == pseudoClass->mAtom) { + result = STATE_CHECK(NS_EVENT_STATE_OPTIONAL); + } else { NS_ERROR("CSS parser parsed a pseudo-class that we do not handle"); result = PR_FALSE; // unknown pseudo class @@ -3637,7 +3643,9 @@ PRBool IsStateSelector(nsCSSSelector& aSelector) (pseudoClass->mAtom == nsCSSPseudoClasses::mozDragOver) || (pseudoClass->mAtom == nsCSSPseudoClasses::focus) || (pseudoClass->mAtom == nsCSSPseudoClasses::hover) || - (pseudoClass->mAtom == nsCSSPseudoClasses::target)) { + (pseudoClass->mAtom == nsCSSPseudoClasses::target) || + (pseudoClass->mAtom == nsCSSPseudoClasses::required) || + (pseudoClass->mAtom == nsCSSPseudoClasses::optional)) { return PR_TRUE; } }