mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 08:48:39 +09:00
Issue #146 - Part 6: Allow position: sticky on table elements.
This commit is contained in:
parent
af75c920b0
commit
d26e13657b
4 changed files with 7 additions and 20 deletions
|
|
@ -474,15 +474,6 @@ RecomputePosition(nsIFrame* aFrame)
|
|||
if (display->IsRelativelyPositionedStyle()) {
|
||||
// Move the frame
|
||||
if (display->mPosition == NS_STYLE_POSITION_STICKY) {
|
||||
if (display->IsInnerTableStyle()) {
|
||||
// We don't currently support sticky positioning of inner table
|
||||
// elements (bug 975644). Bail.
|
||||
//
|
||||
// When this is fixed, remove the null-check for the computed
|
||||
// offsets in nsTableRowFrame::ReflowChildren.
|
||||
return true;
|
||||
}
|
||||
|
||||
// Update sticky positioning for an entire element at once, starting with
|
||||
// the first continuation or ib-split sibling.
|
||||
// It's rare that the frame we already have isn't already the first
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ StickyScrollContainer::GetStickyScrollContainerForFrame(nsIFrame* aFrame)
|
|||
// <html style="position: fixed">
|
||||
return nullptr;
|
||||
}
|
||||
auto frame = static_cast<nsIFrame*>(do_QueryFrame(scrollFrame));
|
||||
nsIFrame* frame = do_QueryFrame(scrollFrame);
|
||||
StickyScrollContainer* s =
|
||||
frame->GetProperty(StickyScrollContainerProperty());
|
||||
if (!s) {
|
||||
|
|
|
|||
|
|
@ -562,15 +562,12 @@ nsFrame::Init(nsIContent* aContent,
|
|||
}
|
||||
if (disp->mPosition == NS_STYLE_POSITION_STICKY &&
|
||||
!aPrevInFlow &&
|
||||
!(mState & NS_FRAME_IS_NONDISPLAY) &&
|
||||
!disp->IsInnerTableStyle()) {
|
||||
!(mState & NS_FRAME_IS_NONDISPLAY)) {
|
||||
// Note that we only add first continuations, but we really only
|
||||
// want to add first continuation-or-ib-split-siblings. But since we
|
||||
// don't yet know if we're a later part of a block-in-inline split,
|
||||
// we'll just add later members of a block-in-inline split here, and
|
||||
// then StickyScrollContainer will remove them later.
|
||||
// We don't currently support relative positioning of inner table
|
||||
// elements (bug 35168), so exclude them from sticky positioning too.
|
||||
StickyScrollContainer* ssc =
|
||||
StickyScrollContainer::GetStickyScrollContainerForFrame(this);
|
||||
if (ssc) {
|
||||
|
|
|
|||
|
|
@ -926,12 +926,11 @@ nsTableRowFrame::ReflowChildren(nsPresContext* aPresContext,
|
|||
// be merged into the else below if we can.)
|
||||
nsMargin* computedOffsetProp =
|
||||
kidFrame->GetProperty(nsIFrame::ComputedOffsetProperty());
|
||||
// Bug 975644: a position:sticky kid can end up with a null
|
||||
// property value here.
|
||||
LogicalMargin computedOffsets(wm, computedOffsetProp ?
|
||||
*computedOffsetProp : nsMargin());
|
||||
ReflowInput::ApplyRelativePositioning(kidFrame, wm, computedOffsets,
|
||||
&kidPosition, containerSize);
|
||||
|
||||
// On our fist reflow sticky children may not have the property yet (we
|
||||
// need to reflow the children first to size the scroll frame).
|
||||
LogicalMargin computedOffsets(wm, computedOffsetProp ? *computedOffsetProp : nsMargin());
|
||||
ReflowInput::ApplyRelativePositioning(kidFrame, wm, computedOffsets, &kidPosition, containerSize);
|
||||
}
|
||||
|
||||
// In vertical-rl mode, we are likely to have containerSize.width = 0
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue