From ea99b5ffb8aacc24f5fbb2dcaca6455e08f8443d Mon Sep 17 00:00:00 2001 From: "vidur%netscape.com" Date: Thu, 20 May 1999 23:24:06 +0000 Subject: [PATCH] Fix for bug 6843. Option.selected returns the correct value for non-multi-selects. git-svn-id: svn://10.0.0.236/trunk@32430 18797224-902f-48f8-a5cc-f745e15eee43 --- .../html/forms/src/nsSelectControlFrame.cpp | 53 +++++++++++++------ 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/mozilla/layout/html/forms/src/nsSelectControlFrame.cpp b/mozilla/layout/html/forms/src/nsSelectControlFrame.cpp index e61c1dce7a9..96876901cae 100644 --- a/mozilla/layout/html/forms/src/nsSelectControlFrame.cpp +++ b/mozilla/layout/html/forms/src/nsSelectControlFrame.cpp @@ -1118,26 +1118,45 @@ void nsSelectControlFrame::GetOptionSelected(PRUint32 index, PRBool* aValue) // Get the selected state from the widget void nsSelectControlFrame::GetOptionSelectedFromWidget(PRInt32 index, PRBool* aValue) { - nsIListBox* listBox; *aValue = PR_FALSE; - nsresult result = mWidget->QueryInterface(kListBoxIID, (void **) &listBox); - if ((NS_OK == result) && (nsnull != listBox)) { - PRUint32 numSelected = listBox->GetSelectedCount(); - PRInt32* selOptions = nsnull; - if (numSelected > 0) { - // Could we set numSelected to 1 here? (memory, speed optimization) - selOptions = new PRInt32[numSelected]; - listBox->GetSelectedIndices(selOptions, numSelected); - PRUint32 i; - for (i = 0; i < numSelected; i++) { - if (selOptions[i] == index) { - *aValue = PR_TRUE; - break; - } + nsresult result; + PRBool multiple; + + GetMultiple(&multiple); + if (!multiple) { + nsIListWidget* listWidget; + result = mWidget->QueryInterface(kListWidgetIID, (void **) &listWidget); + + if ((NS_OK == result) && (nsnull != listWidget)) { + PRInt32 selIndex = listWidget->GetSelectedIndex(); + NS_RELEASE(listWidget); + + if (selIndex == index) { + *aValue = PR_TRUE; } - delete[] selOptions; } - NS_RELEASE(listBox); + } + else { + nsIListBox* listBox; + result = mWidget->QueryInterface(kListBoxIID, (void **) &listBox); + if ((NS_OK == result) && (nsnull != listBox)) { + PRUint32 numSelected = listBox->GetSelectedCount(); + PRInt32* selOptions = nsnull; + if (numSelected > 0) { + // Could we set numSelected to 1 here? (memory, speed optimization) + selOptions = new PRInt32[numSelected]; + listBox->GetSelectedIndices(selOptions, numSelected); + PRUint32 i; + for (i = 0; i < numSelected; i++) { + if (selOptions[i] == index) { + *aValue = PR_TRUE; + break; + } + } + delete[] selOptions; + } + NS_RELEASE(listBox); + } } }