PRBool nsTextBoxFrame::UpdateAccesskey(nsWeakFrame& aWeakThis) { nsAutoString accesskey; nsCOMPtr<nsIDOMXULLabelElement> labelElement = do_QueryInterface(mContent); NS_ENSURE_TRUE(aWeakThis.IsAlive(), PR_FALSE); if (labelElement) { // Accesskey may be stored on control. // Because this method is called by the reflow callback, current context // may not be the right one. Pushing the context of mContent so that // if nsIDOMXULLabelElement is implemented in XBL, we don't get a // security exception. nsCxPusher cx; if (cx.Push(mContent)) { labelElement->GetAccessKey(accesskey); NS_ENSURE_TRUE(aWeakThis.IsAlive(), PR_FALSE); } } else { mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::accesskey, accesskey); } if (!accesskey.Equals(mAccessKey)) { // Need to get clean mTitle. mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::value, mTitle); mAccessKey = accesskey; UpdateAccessTitle(); PresContext()->PresShell()-> FrameNeedsReflow(this, nsIPresShell::eStyleChange, NS_FRAME_IS_DIRTY); return PR_TRUE; } return PR_FALSE; }
void nsTextBoxFrame::UpdateAttributes(nsIAtom* aAttribute, PRBool& aResize, PRBool& aRedraw) { PRBool doUpdateTitle = PR_FALSE; aResize = PR_FALSE; aRedraw = PR_FALSE; if (aAttribute == nsnull || aAttribute == nsGkAtoms::crop) { static nsIContent::AttrValuesArray strings[] = { &nsGkAtoms::left, &nsGkAtoms::start, &nsGkAtoms::center, &nsGkAtoms::right, &nsGkAtoms::end, nsnull }; CroppingStyle cropType; switch (mContent->FindAttrValueIn(kNameSpaceID_None, nsGkAtoms::crop, strings, eCaseMatters)) { case 0: case 1: cropType = CropLeft; break; case 2: cropType = CropCenter; break; case 3: case 4: cropType = CropRight; break; default: cropType = CropNone; break; } if (cropType != mCropType) { aResize = PR_TRUE; mCropType = cropType; } } if (aAttribute == nsnull || aAttribute == nsGkAtoms::value) { mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::value, mTitle); doUpdateTitle = PR_TRUE; } if (aAttribute == nsnull || aAttribute == nsGkAtoms::accesskey) { mNeedsReflowCallback = PR_TRUE; // Ensure that layout is refreshed and reflow callback called. aResize = PR_TRUE; } if (doUpdateTitle) { UpdateAccessTitle(); aResize = PR_TRUE; } }