mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 12:55:46 +00:00
Fix for 96042. r=dbaron, sr=sspitzer
This commit is contained in:
parent
6b7463a799
commit
8330834eb2
@ -203,6 +203,9 @@ NS_NewAutoRepeatBoxFrame ( nsIPresShell* aPresShell, nsIFrame** aNewFrame);
|
||||
nsresult
|
||||
NS_NewRootBoxFrame ( nsIPresShell* aPresShell, nsIFrame** aNewFrame);
|
||||
|
||||
nsresult
|
||||
NS_NewDocElementBoxFrame(nsIPresShell* aPresShell, nsIFrame** aNewFrame);
|
||||
|
||||
nsresult
|
||||
NS_NewThumbFrame ( nsIPresShell* aPresShell, nsIFrame** aNewFrame );
|
||||
|
||||
@ -3529,7 +3532,7 @@ nsCSSFrameConstructor::ConstructDocElementFrame(nsIPresShell* aPresShell,
|
||||
PRInt32 nameSpaceID;
|
||||
if (NS_SUCCEEDED(aDocElement->GetNameSpaceID(nameSpaceID)) &&
|
||||
nameSpaceID == nsXULAtoms::nameSpaceID) {
|
||||
rv = NS_NewBoxFrame(aPresShell, &contentFrame, PR_TRUE);
|
||||
rv = NS_NewDocElementBoxFrame(aPresShell, &contentFrame);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
@ -3620,7 +3623,7 @@ nsCSSFrameConstructor::ConstructDocElementFrame(nsIPresShell* aPresShell,
|
||||
|
||||
// Create any anonymous frames the doc element frame requires
|
||||
CreateAnonymousFrames(aPresShell, aPresContext, nsnull, aState, aDocElement, contentFrame,
|
||||
childItems);
|
||||
childItems, PR_TRUE);
|
||||
|
||||
// Set the initial child lists
|
||||
contentFrame->SetInitialChildList(aPresContext, nsnull,
|
||||
@ -4009,7 +4012,6 @@ nsCSSFrameConstructor::ConstructRootFrame(nsIPresShell* aPresShell,
|
||||
// The eventual parent of the document element frame
|
||||
mDocElementContainingBlock = pageFrame;
|
||||
|
||||
|
||||
// Set the initial child lists
|
||||
rootFrame->SetInitialChildList(aPresContext, nsnull, pageFrame);
|
||||
|
||||
@ -5257,7 +5259,8 @@ nsCSSFrameConstructor::CreateAnonymousFrames(nsIPresShell* aPresShell,
|
||||
nsFrameConstructorState& aState,
|
||||
nsIContent* aParent,
|
||||
nsIFrame* aNewFrame,
|
||||
nsFrameItems& aChildItems)
|
||||
nsFrameItems& aChildItems,
|
||||
PRBool aIsRoot)
|
||||
{
|
||||
// See if we might have anonymous content
|
||||
// by looking at the tag rather than doing a QueryInterface on
|
||||
@ -5269,14 +5272,13 @@ nsCSSFrameConstructor::CreateAnonymousFrames(nsIPresShell* aPresShell,
|
||||
// nsGenericElement::SetDocument ought to keep a list like this one,
|
||||
// but it can't because nsGfxScrollFrames get around this.
|
||||
#ifdef INCLUDE_XUL
|
||||
if (aTag != nsHTMLAtoms::input &&
|
||||
if (!aIsRoot && aTag != nsHTMLAtoms::input &&
|
||||
aTag != nsHTMLAtoms::textarea &&
|
||||
aTag != nsHTMLAtoms::combobox &&
|
||||
aTag != nsHTMLAtoms::isindex &&
|
||||
aTag != nsXULAtoms::scrollbar
|
||||
) {
|
||||
) {
|
||||
return NS_OK;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -515,7 +515,8 @@ protected:
|
||||
nsFrameConstructorState& aState,
|
||||
nsIContent* aParent,
|
||||
nsIFrame* aNewFrame,
|
||||
nsFrameItems& aChildItems);
|
||||
nsFrameItems& aChildItems,
|
||||
PRBool aIsRoot = PR_FALSE);
|
||||
|
||||
nsresult CreateAnonymousFrames(nsIPresShell* aPresShell,
|
||||
nsIPresContext* aPresContext,
|
||||
|
@ -203,6 +203,9 @@ NS_NewAutoRepeatBoxFrame ( nsIPresShell* aPresShell, nsIFrame** aNewFrame);
|
||||
nsresult
|
||||
NS_NewRootBoxFrame ( nsIPresShell* aPresShell, nsIFrame** aNewFrame);
|
||||
|
||||
nsresult
|
||||
NS_NewDocElementBoxFrame(nsIPresShell* aPresShell, nsIFrame** aNewFrame);
|
||||
|
||||
nsresult
|
||||
NS_NewThumbFrame ( nsIPresShell* aPresShell, nsIFrame** aNewFrame );
|
||||
|
||||
@ -3529,7 +3532,7 @@ nsCSSFrameConstructor::ConstructDocElementFrame(nsIPresShell* aPresShell,
|
||||
PRInt32 nameSpaceID;
|
||||
if (NS_SUCCEEDED(aDocElement->GetNameSpaceID(nameSpaceID)) &&
|
||||
nameSpaceID == nsXULAtoms::nameSpaceID) {
|
||||
rv = NS_NewBoxFrame(aPresShell, &contentFrame, PR_TRUE);
|
||||
rv = NS_NewDocElementBoxFrame(aPresShell, &contentFrame);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
@ -3620,7 +3623,7 @@ nsCSSFrameConstructor::ConstructDocElementFrame(nsIPresShell* aPresShell,
|
||||
|
||||
// Create any anonymous frames the doc element frame requires
|
||||
CreateAnonymousFrames(aPresShell, aPresContext, nsnull, aState, aDocElement, contentFrame,
|
||||
childItems);
|
||||
childItems, PR_TRUE);
|
||||
|
||||
// Set the initial child lists
|
||||
contentFrame->SetInitialChildList(aPresContext, nsnull,
|
||||
@ -4009,7 +4012,6 @@ nsCSSFrameConstructor::ConstructRootFrame(nsIPresShell* aPresShell,
|
||||
// The eventual parent of the document element frame
|
||||
mDocElementContainingBlock = pageFrame;
|
||||
|
||||
|
||||
// Set the initial child lists
|
||||
rootFrame->SetInitialChildList(aPresContext, nsnull, pageFrame);
|
||||
|
||||
@ -5257,7 +5259,8 @@ nsCSSFrameConstructor::CreateAnonymousFrames(nsIPresShell* aPresShell,
|
||||
nsFrameConstructorState& aState,
|
||||
nsIContent* aParent,
|
||||
nsIFrame* aNewFrame,
|
||||
nsFrameItems& aChildItems)
|
||||
nsFrameItems& aChildItems,
|
||||
PRBool aIsRoot)
|
||||
{
|
||||
// See if we might have anonymous content
|
||||
// by looking at the tag rather than doing a QueryInterface on
|
||||
@ -5269,14 +5272,13 @@ nsCSSFrameConstructor::CreateAnonymousFrames(nsIPresShell* aPresShell,
|
||||
// nsGenericElement::SetDocument ought to keep a list like this one,
|
||||
// but it can't because nsGfxScrollFrames get around this.
|
||||
#ifdef INCLUDE_XUL
|
||||
if (aTag != nsHTMLAtoms::input &&
|
||||
if (!aIsRoot && aTag != nsHTMLAtoms::input &&
|
||||
aTag != nsHTMLAtoms::textarea &&
|
||||
aTag != nsHTMLAtoms::combobox &&
|
||||
aTag != nsHTMLAtoms::isindex &&
|
||||
aTag != nsXULAtoms::scrollbar
|
||||
) {
|
||||
) {
|
||||
return NS_OK;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -515,7 +515,8 @@ protected:
|
||||
nsFrameConstructorState& aState,
|
||||
nsIContent* aParent,
|
||||
nsIFrame* aNewFrame,
|
||||
nsFrameItems& aChildItems);
|
||||
nsFrameItems& aChildItems,
|
||||
PRBool aIsRoot = PR_FALSE);
|
||||
|
||||
nsresult CreateAnonymousFrames(nsIPresShell* aPresShell,
|
||||
nsIPresContext* aPresContext,
|
||||
|
@ -55,6 +55,7 @@ CPPSRCS = \
|
||||
nsMonumentLayout.cpp \
|
||||
nsImageBoxFrame.cpp \
|
||||
nsRootBoxFrame.cpp \
|
||||
nsDocElementBoxFrame.cpp \
|
||||
nsBox.cpp \
|
||||
nsBoxLayoutState.cpp \
|
||||
nsBoxToBlockAdaptor.cpp \
|
||||
|
@ -44,6 +44,7 @@ CPPSRCS= \
|
||||
nsMonumentLayout.cpp \
|
||||
nsImageBoxFrame.cpp \
|
||||
nsRootBoxFrame.cpp \
|
||||
nsDocElementBoxFrame.cpp \
|
||||
nsStackLayout.cpp \
|
||||
nsSplitterFrame.cpp \
|
||||
nsButtonBoxFrame.cpp \
|
||||
@ -103,6 +104,7 @@ CPP_OBJS= \
|
||||
.\$(OBJDIR)\nsMonumentLayout.obj \
|
||||
.\$(OBJDIR)\nsImageBoxFrame.obj \
|
||||
.\$(OBJDIR)\nsRootBoxFrame.obj \
|
||||
.\$(OBJDIR)\nsDocElementBoxFrame.obj \
|
||||
.\$(OBJDIR)\nsStackLayout.obj \
|
||||
.\$(OBJDIR)\nsPopupSetFrame.obj \
|
||||
.\$(OBJDIR)\nsMenuBarFrame.obj \
|
||||
|
163
layout/xul/base/src/nsDocElementBoxFrame.cpp
Normal file
163
layout/xul/base/src/nsDocElementBoxFrame.cpp
Normal file
@ -0,0 +1,163 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
#include "nsHTMLParts.h"
|
||||
#include "nsContainerFrame.h"
|
||||
#include "nsCSSRendering.h"
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIReflowCommand.h"
|
||||
#include "nsIPresContext.h"
|
||||
#include "nsIStyleContext.h"
|
||||
#include "nsViewsCID.h"
|
||||
#include "nsIView.h"
|
||||
#include "nsIViewManager.h"
|
||||
#include "nsIWidget.h"
|
||||
#include "nsHTMLIIDs.h"
|
||||
#include "nsPageFrame.h"
|
||||
#include "nsIRenderingContext.h"
|
||||
#include "nsGUIEvent.h"
|
||||
#include "nsIDOMEvent.h"
|
||||
#include "nsStyleConsts.h"
|
||||
#include "nsIViewManager.h"
|
||||
#include "nsHTMLAtoms.h"
|
||||
#include "nsIEventStateManager.h"
|
||||
#include "nsIDeviceContext.h"
|
||||
#include "nsIScrollableView.h"
|
||||
#include "nsLayoutAtoms.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsBoxFrame.h"
|
||||
#include "nsStackLayout.h"
|
||||
#include "nsIRootBox.h"
|
||||
#include "nsIAnonymousContentCreator.h"
|
||||
#include "nsIElementFactory.h"
|
||||
#include "nsINodeInfo.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsISupportsArray.h"
|
||||
|
||||
// Interface IDs
|
||||
|
||||
//#define DEBUG_REFLOW
|
||||
|
||||
class nsDocElementBoxFrame : public nsBoxFrame, public nsIAnonymousContentCreator {
|
||||
public:
|
||||
|
||||
friend nsresult NS_NewBoxFrame(nsIPresShell* aPresShell, nsIFrame** aNewFrame);
|
||||
|
||||
nsDocElementBoxFrame(nsIPresShell* aShell);
|
||||
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
|
||||
// nsIAnonymousContentCreator
|
||||
NS_IMETHOD CreateAnonymousContent(nsIPresContext* aPresContext,
|
||||
nsISupportsArray& aAnonymousItems);
|
||||
NS_IMETHOD CreateFrameFor(nsIPresContext* aPresContext,
|
||||
nsIContent * aContent,
|
||||
nsIFrame** aFrame) { if (aFrame) *aFrame = nsnull; return NS_ERROR_FAILURE; }
|
||||
|
||||
#ifdef DEBUG
|
||||
NS_IMETHOD GetFrameName(nsString& aResult) const;
|
||||
NS_IMETHOD SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const;
|
||||
#endif
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
nsresult
|
||||
NS_NewDocElementBoxFrame(nsIPresShell* aPresShell, nsIFrame** aNewFrame)
|
||||
{
|
||||
NS_PRECONDITION(aNewFrame, "null OUT ptr");
|
||||
if (nsnull == aNewFrame) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
nsDocElementBoxFrame* it = new (aPresShell) nsDocElementBoxFrame (aPresShell);
|
||||
if (nsnull == it) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
*aNewFrame = it;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsDocElementBoxFrame::nsDocElementBoxFrame(nsIPresShell* aShell):nsBoxFrame(aShell, PR_TRUE)
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocElementBoxFrame::CreateAnonymousContent(nsIPresContext* aPresContext,
|
||||
nsISupportsArray& aAnonymousItems)
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIElementFactory> elementFactory =
|
||||
do_GetService(NS_ELEMENT_FACTORY_CONTRACTID_PREFIX "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", &rv);
|
||||
if (!elementFactory)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsINodeInfoManager> nodeInfoManager;
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
mContent->GetDocument(*getter_AddRefs(doc));
|
||||
doc->GetNodeInfoManager(*getter_AddRefs(nodeInfoManager));
|
||||
NS_ENSURE_TRUE(nodeInfoManager, NS_ERROR_FAILURE);
|
||||
|
||||
nsCOMPtr<nsINodeInfo> nodeInfo;
|
||||
nodeInfoManager->GetNodeInfo(NS_ConvertASCIItoUCS2("popupgroup"), nsString(), NS_ConvertASCIItoUCS2("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"),
|
||||
*getter_AddRefs(nodeInfo));
|
||||
|
||||
nsCOMPtr<nsIContent> content;
|
||||
elementFactory->CreateInstanceByTag(nodeInfo, getter_AddRefs(content));
|
||||
|
||||
aAnonymousItems.AppendElement(content);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(nsrefcnt)
|
||||
nsDocElementBoxFrame::AddRef(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(nsrefcnt)
|
||||
nsDocElementBoxFrame::Release(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(nsDocElementBoxFrame)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIAnonymousContentCreator)
|
||||
NS_INTERFACE_MAP_END_INHERITING(nsBoxFrame)
|
||||
|
||||
#ifdef DEBUG
|
||||
NS_IMETHODIMP
|
||||
nsDocElementBoxFrame::GetFrameName(nsString& aResult) const
|
||||
{
|
||||
return MakeFrameName("DocElementBox", aResult);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocElementBoxFrame::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const
|
||||
{
|
||||
if (!aResult) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
*aResult = sizeof(*this);
|
||||
return NS_OK;
|
||||
}
|
||||
#endif
|
@ -4,13 +4,6 @@
|
||||
xmlns="http://www.mozilla.org/xbl"
|
||||
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<binding id="basewindow">
|
||||
<content>
|
||||
<xul:popupgroup/>
|
||||
<children/>
|
||||
</content>
|
||||
</binding>
|
||||
|
||||
<binding id="basetext">
|
||||
<implementation>
|
||||
<!-- public implementation -->
|
||||
|
@ -70,10 +70,6 @@ window {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
window,wizard,dialog,page {
|
||||
-moz-binding: url(chrome://global/content/bindings/general.xml#basewindow);
|
||||
}
|
||||
|
||||
/******** box *******/
|
||||
|
||||
vbox {
|
||||
|
Loading…
Reference in New Issue
Block a user