Make the GetListBoxBody() call from the frame constructor not Flush_Frames. b=392285 r+sr=bzbarsky a=dsicore

This commit is contained in:
mats.palmgren@bredband.net 2007-10-06 08:03:35 -07:00
parent b1ecdb8588
commit c1ec42f835
3 changed files with 22 additions and 18 deletions

View File

@ -8784,7 +8784,7 @@ PRBool NotifyListBoxBody(nsPresContext* aPresContext,
xulElement->GetBoxObject(getter_AddRefs(boxObject));
nsCOMPtr<nsPIListBoxObject> listBoxObject = do_QueryInterface(boxObject);
if (listBoxObject) {
nsIListBoxObject* listboxBody = listBoxObject->GetListBoxBody();
nsIListBoxObject* listboxBody = listBoxObject->GetListBoxBody(PR_FALSE);
if (listboxBody) {
nsListBoxBodyFrame *listBoxBodyFrame = static_cast<nsListBoxBodyFrame*>(listboxBody);
if (aOperation == CONTENT_REMOVED) {

View File

@ -55,7 +55,7 @@ public:
NS_DECL_NSILISTBOXOBJECT
// nsPIListBoxObject
virtual nsIListBoxObject* GetListBoxBody();
virtual nsIListBoxObject* GetListBoxBody(PRBool aFlush);
nsListBoxObject();
@ -88,7 +88,7 @@ nsListBoxObject::GetListboxBody(nsIListBoxObject * *aListboxBody)
NS_IMETHODIMP
nsListBoxObject::GetRowCount(PRInt32 *aResult)
{
nsIListBoxObject* body = GetListBoxBody();
nsIListBoxObject* body = GetListBoxBody(PR_TRUE);
if (body)
return body->GetRowCount(aResult);
return NS_OK;
@ -97,7 +97,7 @@ nsListBoxObject::GetRowCount(PRInt32 *aResult)
NS_IMETHODIMP
nsListBoxObject::GetNumberOfVisibleRows(PRInt32 *aResult)
{
nsIListBoxObject* body = GetListBoxBody();
nsIListBoxObject* body = GetListBoxBody(PR_TRUE);
if (body)
return body->GetNumberOfVisibleRows(aResult);
return NS_OK;
@ -106,7 +106,7 @@ nsListBoxObject::GetNumberOfVisibleRows(PRInt32 *aResult)
NS_IMETHODIMP
nsListBoxObject::GetIndexOfFirstVisibleRow(PRInt32 *aResult)
{
nsIListBoxObject* body = GetListBoxBody();
nsIListBoxObject* body = GetListBoxBody(PR_TRUE);
if (body)
return body->GetIndexOfFirstVisibleRow(aResult);
return NS_OK;
@ -114,7 +114,7 @@ nsListBoxObject::GetIndexOfFirstVisibleRow(PRInt32 *aResult)
NS_IMETHODIMP nsListBoxObject::EnsureIndexIsVisible(PRInt32 aRowIndex)
{
nsIListBoxObject* body = GetListBoxBody();
nsIListBoxObject* body = GetListBoxBody(PR_TRUE);
if (body)
return body->EnsureIndexIsVisible(aRowIndex);
return NS_OK;
@ -123,7 +123,7 @@ NS_IMETHODIMP nsListBoxObject::EnsureIndexIsVisible(PRInt32 aRowIndex)
NS_IMETHODIMP
nsListBoxObject::ScrollToIndex(PRInt32 aRowIndex)
{
nsIListBoxObject* body = GetListBoxBody();
nsIListBoxObject* body = GetListBoxBody(PR_TRUE);
if (body)
return body->ScrollToIndex(aRowIndex);
return NS_OK;
@ -132,7 +132,7 @@ nsListBoxObject::ScrollToIndex(PRInt32 aRowIndex)
NS_IMETHODIMP
nsListBoxObject::ScrollByLines(PRInt32 aNumLines)
{
nsIListBoxObject* body = GetListBoxBody();
nsIListBoxObject* body = GetListBoxBody(PR_TRUE);
if (body)
return body->ScrollByLines(aNumLines);
return NS_OK;
@ -141,7 +141,7 @@ nsListBoxObject::ScrollByLines(PRInt32 aNumLines)
NS_IMETHODIMP
nsListBoxObject::GetItemAtIndex(PRInt32 index, nsIDOMElement **_retval)
{
nsIListBoxObject* body = GetListBoxBody();
nsIListBoxObject* body = GetListBoxBody(PR_TRUE);
if (body)
return body->GetItemAtIndex(index, _retval);
return NS_OK;
@ -152,7 +152,7 @@ nsListBoxObject::GetIndexOfItem(nsIDOMElement* aElement, PRInt32 *aResult)
{
*aResult = 0;
nsIListBoxObject* body = GetListBoxBody();
nsIListBoxObject* body = GetListBoxBody(PR_TRUE);
if (body)
return body->GetIndexOfItem(aElement, aResult);
return NS_OK;
@ -187,21 +187,23 @@ FindBodyContent(nsIContent* aParent, nsIContent** aResult)
}
nsIListBoxObject*
nsListBoxObject::GetListBoxBody()
nsListBoxObject::GetListBoxBody(PRBool aFlush)
{
if (mListBoxBody) {
return mListBoxBody;
}
nsIFrame* frame = GetFrame(PR_FALSE);
if (!frame)
return nsnull;
nsIPresShell* shell = GetPresShell(PR_FALSE);
if (!shell) {
return nsnull;
}
nsIFrame* frame = aFlush ?
GetFrame(PR_FALSE) /* does Flush_Frames */ :
shell->GetPrimaryFrameFor(mContent);
if (!frame)
return nsnull;
// Iterate over our content model children looking for the body.
nsCOMPtr<nsIContent> content;
FindBodyContent(frame->GetContent(), getter_AddRefs(content));

View File

@ -38,9 +38,10 @@
#ifndef nsPIListBoxObject_h__
#define nsPIListBoxObject_h__
// fa9549f7-ee09-48fc-89f7-30cceee21c15
#define NS_PILISTBOXOBJECT_IID \
{ 0x965f3d0b, 0x2960, 0x40f5, \
{ 0xaa, 0xab, 0x32, 0xd2, 0xae, 0x09, 0x90, 0x94 } }
{ 0xfa9549f7, 0xee09, 0x48fc, \
{ 0x89, 0xf7, 0x30, 0xcc, 0xee, 0xe2, 0x1c, 0x15 } }
#include "nsIListBoxObject.h"
@ -49,8 +50,9 @@ class nsPIListBoxObject : public nsIListBoxObject {
NS_DECLARE_STATIC_IID_ACCESSOR(NS_PILISTBOXOBJECT_IID)
/**
* Get the list box body. This will search for it as needed.
* If aFlush is PR_FALSE we don't Flush_Frames though.
*/
virtual nsIListBoxObject* GetListBoxBody() = 0;
virtual nsIListBoxObject* GetListBoxBody(PRBool aFlush) = 0;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsPIListBoxObject, NS_PILISTBOXOBJECT_IID)