Bug 1288383 - Replace NS_STYLE_USER_FOCUS_* with an enum class; r=heycam
MozReview-Commit-ID: A7BYcfsn1tI
--- a/dom/base/nsFocusManager.cpp
+++ b/dom/base/nsFocusManager.cpp
@@ -1574,18 +1574,18 @@ nsFocusManager::CheckIfFocusable(nsICont
// if this is a child frame content node, check if it is visible and
// call the content node's IsFocusable method instead of the frame's
// IsFocusable method. This skips checking the style system and ensures that
// offscreen browsers can still be focused.
nsIDocument* subdoc = doc->GetSubDocumentFor(aContent);
if (subdoc && IsWindowVisible(subdoc->GetWindow())) {
const nsStyleUserInterface* ui = frame->StyleUserInterface();
- int32_t tabIndex = (ui->mUserFocus == NS_STYLE_USER_FOCUS_IGNORE ||
- ui->mUserFocus == NS_STYLE_USER_FOCUS_NONE) ? -1 : 0;
+ int32_t tabIndex = (ui->mUserFocus == StyleUserFocus::Ignore ||
+ ui->mUserFocus == StyleUserFocus::None_) ? -1 : 0;
return aContent->IsFocusable(&tabIndex, aFlags & FLAG_BYMOUSE) ? aContent : nullptr;
}
return frame->IsFocusable(nullptr, aFlags & FLAG_BYMOUSE) ? aContent : nullptr;
}
bool
nsFocusManager::Blur(nsPIDOMWindowOuter* aWindowToClear,
--- a/dom/events/EventStateManager.cpp
+++ b/dom/events/EventStateManager.cpp
@@ -2949,17 +2949,17 @@ EventStateManager::PostHandleEvent(nsPre
// 3. XUL control element has the disabled property set to 'true'.
//
// We can't use nsIFrame::IsFocusable() because we want to blur when
// we click on a visibility: none element.
// We can't use nsIContent::IsFocusable() because we want to blur when
// we click on a non-focusable element like a <div>.
// We have to use |aEvent->mTarget| to not make sure we do not check
// an anonymous node of the targeted element.
- suppressBlur = (ui->mUserFocus == NS_STYLE_USER_FOCUS_IGNORE);
+ suppressBlur = (ui->mUserFocus == StyleUserFocus::Ignore);
if (!suppressBlur) {
nsCOMPtr<Element> element = do_QueryInterface(aEvent->mTarget);
suppressBlur = element &&
element->State().HasState(NS_EVENT_STATE_DISABLED);
}
if (!suppressBlur) {
--- a/dom/xul/nsXULPopupListener.cpp
+++ b/dom/xul/nsXULPopupListener.cpp
@@ -237,17 +237,17 @@ nsXULPopupListener::FireFocusOnTargetCon
// XXXbz between what events? We don't use this local at all!
RefPtr<nsPresContext> context = shell->GetPresContext();
nsCOMPtr<nsIContent> content = do_QueryInterface(aTargetNode);
nsIFrame* targetFrame = content->GetPrimaryFrame();
if (!targetFrame) return NS_ERROR_FAILURE;
const nsStyleUserInterface* ui = targetFrame->StyleUserInterface();
- bool suppressBlur = (ui->mUserFocus == NS_STYLE_USER_FOCUS_IGNORE);
+ bool suppressBlur = (ui->mUserFocus == StyleUserFocus::Ignore);
nsCOMPtr<nsIDOMElement> element;
nsCOMPtr<nsIContent> newFocus = do_QueryInterface(content);
nsIFrame* currFrame = targetFrame;
// Look for the nearest enclosing focusable frame.
while (currFrame) {
int32_t tabIndexUnused;
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -8538,18 +8538,18 @@ nsIFrame::IsFocusable(int32_t *aTabIndex
*aTabIndex = -1; // Default for early return is not focusable
}
bool isFocusable = false;
if (mContent && mContent->IsElement() && IsVisibleConsideringAncestors() &&
StyleContext()->GetPseudo() != nsCSSAnonBoxes::anonymousFlexItem &&
StyleContext()->GetPseudo() != nsCSSAnonBoxes::anonymousGridItem) {
const nsStyleUserInterface* ui = StyleUserInterface();
- if (ui->mUserFocus != NS_STYLE_USER_FOCUS_IGNORE &&
- ui->mUserFocus != NS_STYLE_USER_FOCUS_NONE) {
+ if (ui->mUserFocus != StyleUserFocus::Ignore &&
+ ui->mUserFocus != StyleUserFocus::None_) {
// Pass in default tabindex of -1 for nonfocusable and 0 for focusable
tabIndex = 0;
}
isFocusable = mContent->IsFocusable(&tabIndex, aWithMouse);
if (!isFocusable && !aWithMouse &&
GetType() == nsGkAtoms::scrollFrame &&
mContent->IsHTMLElement() &&
!mContent->IsRootOfNativeAnonymousSubtree() &&
--- a/layout/style/nsCSSProps.cpp
+++ b/layout/style/nsCSSProps.cpp
@@ -2115,24 +2115,24 @@ const KTableEntry nsCSSProps::kUnicodeBi
{ eCSSKeyword_plaintext, NS_STYLE_UNICODE_BIDI_PLAINTEXT },
{ eCSSKeyword__moz_isolate, NS_STYLE_UNICODE_BIDI_ISOLATE },
{ eCSSKeyword__moz_isolate_override, NS_STYLE_UNICODE_BIDI_ISOLATE_OVERRIDE },
{ eCSSKeyword__moz_plaintext, NS_STYLE_UNICODE_BIDI_PLAINTEXT },
{ eCSSKeyword_UNKNOWN, -1 }
};
const KTableEntry nsCSSProps::kUserFocusKTable[] = {
- { eCSSKeyword_none, NS_STYLE_USER_FOCUS_NONE },
- { eCSSKeyword_normal, NS_STYLE_USER_FOCUS_NORMAL },
- { eCSSKeyword_ignore, NS_STYLE_USER_FOCUS_IGNORE },
- { eCSSKeyword_select_all, NS_STYLE_USER_FOCUS_SELECT_ALL },
- { eCSSKeyword_select_before, NS_STYLE_USER_FOCUS_SELECT_BEFORE },
- { eCSSKeyword_select_after, NS_STYLE_USER_FOCUS_SELECT_AFTER },
- { eCSSKeyword_select_same, NS_STYLE_USER_FOCUS_SELECT_SAME },
- { eCSSKeyword_select_menu, NS_STYLE_USER_FOCUS_SELECT_MENU },
+ { eCSSKeyword_none, uint8_t(StyleUserFocus::None_) },
+ { eCSSKeyword_normal, uint8_t(StyleUserFocus::Normal) },
+ { eCSSKeyword_ignore, uint8_t(StyleUserFocus::Ignore) },
+ { eCSSKeyword_select_all, uint8_t(StyleUserFocus::SelectAll) },
+ { eCSSKeyword_select_before, uint8_t(StyleUserFocus::SelectBefore) },
+ { eCSSKeyword_select_after, uint8_t(StyleUserFocus::SelectAfter) },
+ { eCSSKeyword_select_same, uint8_t(StyleUserFocus::SelectSame) },
+ { eCSSKeyword_select_menu, uint8_t(StyleUserFocus::SelectMenu) },
{ eCSSKeyword_UNKNOWN, -1 }
};
const KTableEntry nsCSSProps::kUserInputKTable[] = {
{ eCSSKeyword_none, NS_STYLE_USER_INPUT_NONE },
{ eCSSKeyword_auto, NS_STYLE_USER_INPUT_AUTO },
{ eCSSKeyword_enabled, NS_STYLE_USER_INPUT_ENABLED },
{ eCSSKeyword_disabled, NS_STYLE_USER_INPUT_DISABLED },
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -4448,17 +4448,17 @@ nsComputedDOMStyle::DoGetIMEMode()
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetUserFocus()
{
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
val->SetIdent(
- nsCSSProps::ValueToKeywordEnum(StyleUserInterface()->mUserFocus,
+ nsCSSProps::ValueToKeywordEnum(uint8_t(StyleUserInterface()->mUserFocus),
nsCSSProps::kUserFocusKTable));
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetUserInput()
{
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
--- a/layout/style/nsRuleNode.cpp
+++ b/layout/style/nsRuleNode.cpp
@@ -1297,16 +1297,17 @@ struct SetEnumValueHelper
MOZ_ASSERT(value >= static_cast<decltype(value)>(type_::min_) && \
value <= static_cast<decltype(value)>(type_::max_), \
"inappropriate value"); \
aField = static_cast<type_>(value); \
}
DEFINE_ENUM_CLASS_SETTER(StyleBoxSizing, Content, Border)
DEFINE_ENUM_CLASS_SETTER(StyleFloatEdge, ContentBox, MarginBox)
+ DEFINE_ENUM_CLASS_SETTER(StyleUserFocus, None, SelectMenu)
#undef DEF_SET_ENUMERATED_VALUE
};
template<typename FieldT>
struct SetIntegerValueHelper
{
static void SetIntegerValue(FieldT& aField, const nsCSSValue& aValue)
@@ -5064,17 +5065,17 @@ nsRuleNode::ComputeUserInterfaceData(voi
parentUI->mUserModify,
NS_STYLE_USER_MODIFY_READ_ONLY);
// user-focus: enum, inherit, initial
SetValue(*aRuleData->ValueForUserFocus(),
ui->mUserFocus, conditions,
SETVAL_ENUMERATED | SETVAL_UNSET_INHERIT,
parentUI->mUserFocus,
- NS_STYLE_USER_FOCUS_NONE);
+ StyleUserFocus::None_);
// pointer-events: enum, inherit, initial
SetValue(*aRuleData->ValueForPointerEvents(), ui->mPointerEvents,
conditions,
SETVAL_ENUMERATED | SETVAL_UNSET_INHERIT,
parentUI->mPointerEvents,
NS_STYLE_POINTER_EVENTS_AUTO);
--- a/layout/style/nsStyleConsts.h
+++ b/layout/style/nsStyleConsts.h
@@ -96,24 +96,27 @@ enum class StyleClipShapeSizing : uint8_
// float-edge
enum class StyleFloatEdge : uint8_t {
ContentBox,
MarginBox,
};
// user-focus
-#define NS_STYLE_USER_FOCUS_NONE 0
-#define NS_STYLE_USER_FOCUS_IGNORE 1
-#define NS_STYLE_USER_FOCUS_NORMAL 2
-#define NS_STYLE_USER_FOCUS_SELECT_ALL 3
-#define NS_STYLE_USER_FOCUS_SELECT_BEFORE 4
-#define NS_STYLE_USER_FOCUS_SELECT_AFTER 5
-#define NS_STYLE_USER_FOCUS_SELECT_SAME 6
-#define NS_STYLE_USER_FOCUS_SELECT_MENU 7
+// X11 has a #define for None causing conflicts, so we use None_ here
+enum class StyleUserFocus : uint8_t {
+ None_,
+ Ignore,
+ Normal,
+ SelectAll,
+ SelectBefore,
+ SelectAfter,
+ SelectSame,
+ SelectMenu,
+};
// user-select
#define NS_STYLE_USER_SELECT_NONE 0
#define NS_STYLE_USER_SELECT_TEXT 1
#define NS_STYLE_USER_SELECT_ELEMENT 2
#define NS_STYLE_USER_SELECT_ELEMENTS 3
#define NS_STYLE_USER_SELECT_ALL 4
#define NS_STYLE_USER_SELECT_TOGGLE 5
--- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp
@@ -3878,17 +3878,17 @@ nsCursorImage::operator=(const nsCursorI
}
return *this;
}
nsStyleUserInterface::nsStyleUserInterface(StyleStructContext aContext)
: mUserInput(NS_STYLE_USER_INPUT_AUTO)
, mUserModify(NS_STYLE_USER_MODIFY_READ_ONLY)
- , mUserFocus(NS_STYLE_USER_FOCUS_NONE)
+ , mUserFocus(StyleUserFocus::None_)
, mPointerEvents(NS_STYLE_POINTER_EVENTS_AUTO)
, mCursor(NS_STYLE_CURSOR_AUTO)
, mCursorArrayLength(0)
, mCursorArray(nullptr)
{
MOZ_COUNT_CTOR(nsStyleUserInterface);
}
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -3100,20 +3100,20 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsSt
nsChangeHint_NeutralChange;
}
static nsChangeHint DifferenceAlwaysHandledForDescendants() {
// CalcDifference never returns the reflow hints that are sometimes
// handled for descendants as hints not handled for descendants.
return nsChangeHint_NeedReflow;
}
- uint8_t mUserInput; // [inherited]
- uint8_t mUserModify; // [inherited] (modify-content)
- uint8_t mUserFocus; // [inherited] (auto-select)
- uint8_t mPointerEvents; // [inherited] see nsStyleConsts.h
+ uint8_t mUserInput; // [inherited]
+ uint8_t mUserModify; // [inherited] (modify-content)
+ mozilla::StyleUserFocus mUserFocus; // [inherited] (auto-select)
+ uint8_t mPointerEvents; // [inherited] see nsStyleConsts.h
uint8_t mCursor; // [inherited] See nsStyleConsts.h
uint32_t mCursorArrayLength;
nsCursorImage *mCursorArray;// [inherited] The specified URL values
// and coordinates. Takes precedence over
// mCursor. Zero-length array is represented
// by null pointer.
--- a/widget/windows/nsNativeThemeWin.cpp
+++ b/widget/windows/nsNativeThemeWin.cpp
@@ -3193,17 +3193,17 @@ nsresult nsNativeThemeWin::ClassicGetThe
aState |= DFCS_PUSHED;
else if (IsCheckedButton(aFrame))
aState |= DFCS_CHECKED;
else {
if (contentState.HasAllStates(NS_EVENT_STATE_ACTIVE | NS_EVENT_STATE_HOVER)) {
aState |= DFCS_PUSHED;
const nsStyleUserInterface *uiData = aFrame->StyleUserInterface();
// The down state is flat if the button is focusable
- if (uiData->mUserFocus == NS_STYLE_USER_FOCUS_NORMAL) {
+ if (uiData->mUserFocus == StyleUserFocus::Normal) {
if (!aFrame->GetContent()->IsHTMLElement())
aState |= DFCS_FLAT;
aFocused = true;
}
}
if (contentState.HasState(NS_EVENT_STATE_FOCUS) ||
(aState == DFCS_BUTTONPUSH && IsDefaultButton(aFrame))) {