[XForms] Fix selected attribute on case elements. Bug 332129, r=aaonr+doronr

This commit is contained in:
allan%beaufour.dk 2006-04-04 08:12:38 +00:00
Родитель 53606b4af6
Коммит 635aa3c4fa
2 изменённых файлов: 26 добавлений и 13 удалений

Просмотреть файл

@ -60,6 +60,7 @@ public:
NS_IMETHOD OnCreated(nsIXTFBindableElementWrapper *aWrapper);
NS_IMETHOD OnDestroyed();
NS_IMETHOD DoneAddingChildren();
nsXFormsCaseElement()
: mElement(nsnull), mSelected(PR_FALSE), mCachedSelectedAttr(PR_FALSE)
@ -82,6 +83,8 @@ nsXFormsCaseElement::OnCreated(nsIXTFBindableElementWrapper *aWrapper)
nsresult rv = nsXFormsBindableStub::OnCreated(aWrapper);
NS_ENSURE_SUCCESS(rv, rv);
aWrapper->SetNotificationMask(nsIXTFElement::NOTIFY_DONE_ADDING_CHILDREN);
nsCOMPtr<nsIDOMElement> node;
aWrapper->GetElementNode(getter_AddRefs(node));
@ -101,6 +104,19 @@ nsXFormsCaseElement::OnDestroyed()
return NS_OK;
}
NS_IMETHODIMP
nsXFormsCaseElement::DoneAddingChildren()
{
// cache the value of the "selected" attr
nsAutoString value;
mElement->GetAttribute(NS_LITERAL_STRING("selected"), value);
if (value.EqualsLiteral("true") || value.EqualsLiteral("1")) {
mCachedSelectedAttr = PR_TRUE;
}
return NS_OK;
}
NS_IMETHODIMP
nsXFormsCaseElement::GetInitialSelectedState(PRBool *aInitialSelectedState)
{
@ -114,24 +130,19 @@ nsXFormsCaseElement::SetSelected(PRBool aEnable)
mSelected = aEnable;
nsCOMPtr<nsIXFormsCaseUIElement> caseUI(do_QueryInterface(mElement));
if (caseUI) {
caseUI->CaseSelected(mSelected);
}
if (!caseUI)
return NS_ERROR_FAILURE;
caseUI->CaseSelected(mSelected);
return NS_OK;
}
NS_IMETHODIMP
nsXFormsCaseElement::WidgetAttached()
{
// cache the value of the "selected" attr
nsAutoString value;
mElement->GetAttribute(NS_LITERAL_STRING("selected"), value);
if (value.EqualsLiteral("true") || value.EqualsLiteral("1")) {
mCachedSelectedAttr = PR_TRUE;
}
nsCOMPtr<nsIXFormsCaseUIElement> caseUI(do_QueryInterface(mElement));
NS_WARN_IF_FALSE(caseUI,
"Case element not implementing nsIXFormCaseUIElement?");
if (caseUI) {
caseUI->CaseSelected(mSelected);
}

Просмотреть файл

@ -192,8 +192,10 @@ nsXFormsSwitchElement::Init(nsIDOMElement* aDeselected)
nsCOMPtr<nsIDOMElement> firstCase = FindFirstSelectedCase(aDeselected);
mSelected = firstCase;
nsCOMPtr<nsIXFormsCaseElement> selected(do_QueryInterface(mSelected));
if (selected)
selected->SetSelected(PR_TRUE);
if (selected) {
nsresult rv = selected->SetSelected(PR_TRUE);
NS_WARN_IF_FALSE(NS_SUCCEEDED(rv), "Failed to select case");
}
}
already_AddRefed<nsIDOMElement>
@ -204,7 +206,7 @@ nsXFormsSwitchElement::FindFirstSelectedCase(nsIDOMElement* aDeselected)
nsCOMPtr<nsIDOMElement> firstCase;
while (child) {
nsCOMPtr<nsIDOMElement> childElement(do_QueryInterface(child));
if (childElement && childElement != aDeselected) {
if (childElement && childElement != aDeselected) {
if (nsXFormsUtils::IsXFormsElement(child, NS_LITERAL_STRING("case"))) {
if (!firstCase)
firstCase = childElement;