bug 124985 - nsCSSFrameConstructor - let the form frame have its original parent. nsTableFrame - don't reflow foreign frames. sr=attinasi, r=alexsavulov

This commit is contained in:
karnaze%netscape.com 2002-02-18 15:57:19 +00:00
Родитель 1090e7dedf
Коммит f9d631e41e
4 изменённых файлов: 34 добавлений и 52 удалений

Просмотреть файл

@ -2744,21 +2744,8 @@ nsCSSFrameConstructor::ConstructTableForeignFrame(nsIPresShell* aPres
nsCOMPtr<nsIAtom> tag;
aContent->GetTag(*getter_AddRefs(tag));
if (nsHTMLAtoms::form == tag.get()) {
// A form doesn't get a psuedo frame parent, but it needs a frame.
// if the parent is a table, put the form in the outer table frame
// otherwise use aParentFrameIn as the parent
nsCOMPtr<nsIAtom> frameType;
aParentFrameIn->GetFrameType(getter_AddRefs(frameType));
if (nsLayoutAtoms::tableFrame == frameType.get()) {
aParentFrameIn->GetParent(&parentFrame);
}
else {
parentFrame = aParentFrameIn;
}
}
// Do not construct pseudo frames for trees
else if (MustGeneratePseudoParent(aPresContext, aParentFrameIn, tag.get(), aContent, aStyleContext)) {
if (MustGeneratePseudoParent(aPresContext, aParentFrameIn, tag.get(), aContent, aStyleContext)) {
// this frame may have a pseudo parent, use block frame type to trigger foreign
GetParentFrame(aPresShell, aPresContext, aTableCreator, *aParentFrameIn,
nsLayoutAtoms::blockFrame, aState, parentFrame, aIsPseudoParent);
@ -2939,9 +2926,22 @@ nsCSSFrameConstructor::TableProcessChild(nsIPresShell* aPresShell,
break;
default:
rv = ConstructTableForeignFrame(aPresShell, aPresContext, aState, aChildContent,
aParentFrame, childStyleContext, aTableCreator,
aChildItems, childFrame, isPseudoParent);
{
nsCOMPtr<nsIAtom> tag;
aChildContent->GetTag(*getter_AddRefs(tag));
// A form doesn't get a psuedo frame parent, but it needs a frame, so just use the current parent
if (nsHTMLAtoms::form == tag.get()) {
nsFrameItems items;
rv = ConstructFrame(aPresShell, aPresContext, aState, aChildContent,
aParentFrame, items);
childFrame = items.childList;
}
else {
rv = ConstructTableForeignFrame(aPresShell, aPresContext, aState, aChildContent,
aParentFrame, childStyleContext, aTableCreator,
aChildItems, childFrame, isPseudoParent);
}
}
break;
}

Просмотреть файл

@ -2744,21 +2744,8 @@ nsCSSFrameConstructor::ConstructTableForeignFrame(nsIPresShell* aPres
nsCOMPtr<nsIAtom> tag;
aContent->GetTag(*getter_AddRefs(tag));
if (nsHTMLAtoms::form == tag.get()) {
// A form doesn't get a psuedo frame parent, but it needs a frame.
// if the parent is a table, put the form in the outer table frame
// otherwise use aParentFrameIn as the parent
nsCOMPtr<nsIAtom> frameType;
aParentFrameIn->GetFrameType(getter_AddRefs(frameType));
if (nsLayoutAtoms::tableFrame == frameType.get()) {
aParentFrameIn->GetParent(&parentFrame);
}
else {
parentFrame = aParentFrameIn;
}
}
// Do not construct pseudo frames for trees
else if (MustGeneratePseudoParent(aPresContext, aParentFrameIn, tag.get(), aContent, aStyleContext)) {
if (MustGeneratePseudoParent(aPresContext, aParentFrameIn, tag.get(), aContent, aStyleContext)) {
// this frame may have a pseudo parent, use block frame type to trigger foreign
GetParentFrame(aPresShell, aPresContext, aTableCreator, *aParentFrameIn,
nsLayoutAtoms::blockFrame, aState, parentFrame, aIsPseudoParent);
@ -2939,9 +2926,22 @@ nsCSSFrameConstructor::TableProcessChild(nsIPresShell* aPresShell,
break;
default:
rv = ConstructTableForeignFrame(aPresShell, aPresContext, aState, aChildContent,
aParentFrame, childStyleContext, aTableCreator,
aChildItems, childFrame, isPseudoParent);
{
nsCOMPtr<nsIAtom> tag;
aChildContent->GetTag(*getter_AddRefs(tag));
// A form doesn't get a psuedo frame parent, but it needs a frame, so just use the current parent
if (nsHTMLAtoms::form == tag.get()) {
nsFrameItems items;
rv = ConstructFrame(aPresShell, aPresContext, aState, aChildContent,
aParentFrame, items);
childFrame = items.childList;
}
else {
rv = ConstructTableForeignFrame(aPresShell, aPresContext, aState, aChildContent,
aParentFrame, childStyleContext, aTableCreator,
aChildItems, childFrame, isPseudoParent);
}
}
break;
}

Просмотреть файл

@ -3189,15 +3189,6 @@ nsTableFrame::ReflowChildren(nsIPresContext* aPresContext,
OrderRowGroups(rowGroups, numRowGroups, nsnull);
}
}
else { // it's an unknown frame type, give it a generic reflow and ignore the results
nsHTMLReflowState kidReflowState(aPresContext, aReflowState.reflowState, kidFrame,
nsSize(0,0), eReflowReason_Resize);
nsHTMLReflowMetrics unusedDesiredSize(nsnull);
nsReflowStatus status;
ReflowChild(kidFrame, aPresContext, unusedDesiredSize, kidReflowState,
0, 0, 0, status);
kidFrame->DidReflow(aPresContext, nsnull, NS_FRAME_REFLOW_FINISHED);
}
}
else if (childX < numRowGroups) { // it is a row group but isn't being reflowed
nsRect kidRect;

Просмотреть файл

@ -3189,15 +3189,6 @@ nsTableFrame::ReflowChildren(nsIPresContext* aPresContext,
OrderRowGroups(rowGroups, numRowGroups, nsnull);
}
}
else { // it's an unknown frame type, give it a generic reflow and ignore the results
nsHTMLReflowState kidReflowState(aPresContext, aReflowState.reflowState, kidFrame,
nsSize(0,0), eReflowReason_Resize);
nsHTMLReflowMetrics unusedDesiredSize(nsnull);
nsReflowStatus status;
ReflowChild(kidFrame, aPresContext, unusedDesiredSize, kidReflowState,
0, 0, 0, status);
kidFrame->DidReflow(aPresContext, nsnull, NS_FRAME_REFLOW_FINISHED);
}
}
else if (childX < numRowGroups) { // it is a row group but isn't being reflowed
nsRect kidRect;