Bug 256505. Menu positioning must take into account view-to-widget offset. r+sr=bzbarsky

git-svn-id: svn://10.0.0.236/trunk@171773 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
roc+%cs.cmu.edu 2005-04-06 03:33:18 +00:00
parent cdab4a577c
commit bf84648546

View File

@ -374,8 +374,7 @@ nsMenuPopupFrame::GetLayoutFlags(PRUint32& aFlags)
aFlags = NS_FRAME_NO_SIZE_VIEW | NS_FRAME_NO_MOVE_VIEW | NS_FRAME_NO_VISIBILITY;
}
PRBool ParentIsScrollableView(nsIView* aStartView);
PRBool ParentIsScrollableView(nsIView* aStartView)
static PRBool ParentIsScrollableView(nsIView* aStartView)
{
nsIView* scrollportView = aStartView->GetParent();
return scrollportView != nsnull && scrollportView->ToScrollableView() != nsnull;
@ -822,7 +821,7 @@ nsMenuPopupFrame::SyncViewWithFrame(nsPresContext* aPresContext,
nsIView* containingView = nsnull;
nsPoint offset;
nsMargin margin;
aFrame->GetOffsetFromView(offset, &containingView);
containingView = aFrame->GetClosestView(&offset);
if (!containingView)
return NS_OK;
@ -999,11 +998,14 @@ nsMenuPopupFrame::SyncViewWithFrame(nsPresContext* aPresContext,
// Use containingView instead of parentView, to account for the scrollarrows
// that a parent menu might have.
nsIWidget* parentViewWidget = containingView->GetNearestWidget(nsnull);
nsPoint parentViewWidgetOffset;
nsIWidget* parentViewWidget = containingView->GetNearestWidget(&parentViewWidgetOffset);
nsRect localParentWidgetRect(0,0,0,0), screenParentWidgetRect;
parentViewWidget->WidgetToScreen ( localParentWidgetRect, screenParentWidgetRect );
PRInt32 screenViewLocX = NSIntPixelsToTwips(screenParentWidgetRect.x,p2t) + (xpos - parentPos.x);
PRInt32 screenViewLocY = NSIntPixelsToTwips(screenParentWidgetRect.y,p2t) + (ypos - parentPos.y);
PRInt32 screenViewLocX = NSIntPixelsToTwips(screenParentWidgetRect.x,p2t) +
(xpos - parentPos.x) + parentViewWidgetOffset.x;
PRInt32 screenViewLocY = NSIntPixelsToTwips(screenParentWidgetRect.y,p2t) +
(ypos - parentPos.y) + parentViewWidgetOffset.y;
if ( anchoredToParent ) {