From 5f40caae8fe2c72bdddaa486e3457f299bb73703 Mon Sep 17 00:00:00 2001 From: "alecf%netscape.com" Date: Thu, 6 Jan 2000 09:19:31 +0000 Subject: [PATCH] fix my previous checkin after talking to hyatt - we'll be getting the outer frame, so iterate through the children and QI on each one, sending EnsureRowIsVisible to each when it succeeds r=hyatt --- content/xul/content/src/nsXULTreeElement.cpp | 28 ++++++++++++++------ rdf/content/src/nsXULTreeElement.cpp | 28 ++++++++++++++------ 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/content/xul/content/src/nsXULTreeElement.cpp b/content/xul/content/src/nsXULTreeElement.cpp index bdc85a97e0c..8c4b9dde4a1 100644 --- a/content/xul/content/src/nsXULTreeElement.cpp +++ b/content/xul/content/src/nsXULTreeElement.cpp @@ -440,15 +440,27 @@ nsXULTreeElement::EnsureElementIsVisible(nsIDOMXULElement *aElement) if (!shell) continue; - nsIFrame *frame; - shell->GetPrimaryFrameFor(content, &frame); + nsIFrame *outerFrame; + shell->GetPrimaryFrameFor(content, &outerFrame); - if (frame) { - nsITreeFrame *treeFrame = nsnull; - rv = frame->QueryInterface(NS_GET_IID(nsITreeFrame), - (void **)&treeFrame); - if (NS_SUCCEEDED(rv) && treeFrame) { - treeFrame->EnsureRowIsVisible(indexOfContent); + if (outerFrame) { + + // need to look at the outer frame's children to find the nsTreeFrame + nsIFrame *childFrame=nsnull; + outerFrame->FirstChild(nsnull, &childFrame); + + // now iterate through the children + while (childFrame) { + nsITreeFrame *treeFrame = nsnull; + rv = outerFrame->QueryInterface(NS_GET_IID(nsITreeFrame), + (void **)&treeFrame); + if (NS_SUCCEEDED(rv) && treeFrame) { + treeFrame->EnsureRowIsVisible(indexOfContent); + } + + nsIFrame *nextFrame; + childFrame->GetNextSibling(&nextFrame); + childFrame=nextFrame; } } diff --git a/rdf/content/src/nsXULTreeElement.cpp b/rdf/content/src/nsXULTreeElement.cpp index bdc85a97e0c..8c4b9dde4a1 100644 --- a/rdf/content/src/nsXULTreeElement.cpp +++ b/rdf/content/src/nsXULTreeElement.cpp @@ -440,15 +440,27 @@ nsXULTreeElement::EnsureElementIsVisible(nsIDOMXULElement *aElement) if (!shell) continue; - nsIFrame *frame; - shell->GetPrimaryFrameFor(content, &frame); + nsIFrame *outerFrame; + shell->GetPrimaryFrameFor(content, &outerFrame); - if (frame) { - nsITreeFrame *treeFrame = nsnull; - rv = frame->QueryInterface(NS_GET_IID(nsITreeFrame), - (void **)&treeFrame); - if (NS_SUCCEEDED(rv) && treeFrame) { - treeFrame->EnsureRowIsVisible(indexOfContent); + if (outerFrame) { + + // need to look at the outer frame's children to find the nsTreeFrame + nsIFrame *childFrame=nsnull; + outerFrame->FirstChild(nsnull, &childFrame); + + // now iterate through the children + while (childFrame) { + nsITreeFrame *treeFrame = nsnull; + rv = outerFrame->QueryInterface(NS_GET_IID(nsITreeFrame), + (void **)&treeFrame); + if (NS_SUCCEEDED(rv) && treeFrame) { + treeFrame->EnsureRowIsVisible(indexOfContent); + } + + nsIFrame *nextFrame; + childFrame->GetNextSibling(&nextFrame); + childFrame=nextFrame; } }