From 94f3f356ed710e88753ce6a92f1ba8eab3fe9da7 Mon Sep 17 00:00:00 2001 From: Moonchild Date: Sat, 15 Jan 2022 21:31:29 +0000 Subject: [PATCH] Issue #3050 - Follow-up: extend attribution mapping to resize and corner controls to allow themes to respond to scrollbar-width. Also clean up the comments and whitespace a bit. --- layout/generic/nsGfxScrollFrame.cpp | 33 +++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/layout/generic/nsGfxScrollFrame.cpp b/layout/generic/nsGfxScrollFrame.cpp index e1a7215d93..8e887f9389 100644 --- a/layout/generic/nsGfxScrollFrame.cpp +++ b/layout/generic/nsGfxScrollFrame.cpp @@ -4474,7 +4474,8 @@ ScrollFrameHelper::CreateAnonymousContent( NS_LITERAL_STRING("horizontal"), false); mHScrollbarContent->SetAttr(kNameSpaceID_None, nsGkAtoms::clickthrough, NS_LITERAL_STRING("always"), false); - // Map scrollbar-width to an attribute for browser themes. + + // Map scrollbar-width to an attribute on horizontal scrollbars for browser themes. if (scrollWidth == StyleScrollbarWidth::None) { mHScrollbarContent->SetAttr(kNameSpaceID_None, nsGkAtoms::scrollbarwidth, NS_LITERAL_STRING("none"), false); @@ -4485,6 +4486,7 @@ ScrollFrameHelper::CreateAnonymousContent( mHScrollbarContent->SetAttr(kNameSpaceID_None, nsGkAtoms::scrollbarwidth, NS_LITERAL_STRING("auto"), false); } + if (mIsRoot) { mHScrollbarContent->SetAttr(kNameSpaceID_None, nsGkAtoms::root_, NS_LITERAL_STRING("true"), false); @@ -4508,7 +4510,8 @@ ScrollFrameHelper::CreateAnonymousContent( NS_LITERAL_STRING("vertical"), false); mVScrollbarContent->SetAttr(kNameSpaceID_None, nsGkAtoms::clickthrough, NS_LITERAL_STRING("always"), false); - // Map scrollbar-width to an attribute for browser themes. + + // Map scrollbar-width to an attribute on vertical scrollbars for browser themes. if (scrollWidth == StyleScrollbarWidth::None) { mVScrollbarContent->SetAttr(kNameSpaceID_None, nsGkAtoms::scrollbarwidth, NS_LITERAL_STRING("none"), false); @@ -4519,6 +4522,7 @@ ScrollFrameHelper::CreateAnonymousContent( mVScrollbarContent->SetAttr(kNameSpaceID_None, nsGkAtoms::scrollbarwidth, NS_LITERAL_STRING("auto"), false); } + if (mIsRoot) { mVScrollbarContent->SetAttr(kNameSpaceID_None, nsGkAtoms::root_, NS_LITERAL_STRING("true"), false); @@ -4557,6 +4561,18 @@ ScrollFrameHelper::CreateAnonymousContent( } mResizerContent->SetAttr(kNameSpaceID_None, nsGkAtoms::dir, dir, false); + // Map scrollbar-width to an attribute on resizers for browser themes. + if (scrollWidth == StyleScrollbarWidth::None) { + mResizerContent->SetAttr(kNameSpaceID_None, nsGkAtoms::scrollbarwidth, + NS_LITERAL_STRING("none"), false); + } else if (scrollWidth == StyleScrollbarWidth::Thin) { + mResizerContent->SetAttr(kNameSpaceID_None, nsGkAtoms::scrollbarwidth, + NS_LITERAL_STRING("thin"), false); + } else { + mResizerContent->SetAttr(kNameSpaceID_None, nsGkAtoms::scrollbarwidth, + NS_LITERAL_STRING("auto"), false); + } + if (mIsRoot) { nsIContent* browserRoot = GetBrowserRoot(mOuter->GetContent()); mCollapsedResizer = !(browserRoot && @@ -4579,6 +4595,19 @@ ScrollFrameHelper::CreateAnonymousContent( kNameSpaceID_XUL, nsIDOMNode::ELEMENT_NODE); NS_TrustedNewXULElement(getter_AddRefs(mScrollCornerContent), nodeInfo.forget()); + + // Map scrollbar-width to an attribute on scrollcorners for browser themes. + if (scrollWidth == StyleScrollbarWidth::None) { + mScrollCornerContent->SetAttr(kNameSpaceID_None, nsGkAtoms::scrollbarwidth, + NS_LITERAL_STRING("none"), false); + } else if (scrollWidth == StyleScrollbarWidth::Thin) { + mScrollCornerContent->SetAttr(kNameSpaceID_None, nsGkAtoms::scrollbarwidth, + NS_LITERAL_STRING("thin"), false); + } else { + mScrollCornerContent->SetAttr(kNameSpaceID_None, nsGkAtoms::scrollbarwidth, + NS_LITERAL_STRING("auto"), false); + } + if (!aElements.AppendElement(mScrollCornerContent)) return NS_ERROR_OUT_OF_MEMORY; }