summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/html
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@digia.com>2014-06-24 17:40:05 +0200
committerPierre Rossi <pierre.rossi@gmail.com>2014-07-30 21:25:00 +0200
commit5f12776a6e3d346bdfea8fbc12df8e643c52c3fd (patch)
treec3811ed2457e2cfe1128e384657b2ed6ad9bb8a0 /Source/WebCore/html
parent622bd271367a251b87881d53df45467777ee863a (diff)
[WK2] Update text upon item selection for menu lists
While RenderListBox repaints itself on selection changes, RenderMenuList lacks this logic when it's used for multiple selections (acting as a listbox). Make sure we properly update the element's text as the options are toggled. Originally reported and proposed fix in http://wkb.ug/91862 Task-number: QTBUG-39675 Change-Id: I09f17ff03577fc6f65875674d632684b560fffb7 Reviewed-by: Michael Bruning <michael.bruning@digia.com> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/WebCore/html')
-rw-r--r--Source/WebCore/html/HTMLSelectElement.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/Source/WebCore/html/HTMLSelectElement.cpp b/Source/WebCore/html/HTMLSelectElement.cpp
index a437b375b..31958c89a 100644
--- a/Source/WebCore/html/HTMLSelectElement.cpp
+++ b/Source/WebCore/html/HTMLSelectElement.cpp
@@ -182,6 +182,8 @@ void HTMLSelectElement::listBoxSelectItem(int listIndex, bool allowMultiplySelec
if (fireOnChangeNow)
listBoxOnChange();
}
+ if (usesMenuList() && renderer())
+ toRenderMenuList(renderer())->setTextFromOption(selectedIndex());
}
bool HTMLSelectElement::usesMenuList() const
@@ -826,6 +828,8 @@ void HTMLSelectElement::optionSelectionStateChanged(HTMLOptionElement* option, b
selectOption(option->index());
else if (!usesMenuList())
selectOption(-1);
+ else if (m_multiple)
+ selectOption(selectedIndex());
else
selectOption(nextSelectableListIndex(-1));
}
@@ -862,12 +866,12 @@ void HTMLSelectElement::selectOption(int optionIndex, SelectOptionFlags flags)
m_isProcessingUserDrivenChange = flags & UserDriven;
if (flags & DispatchChangeEvent)
dispatchChangeEventForMenuList();
- if (RenderObject* renderer = this->renderer()) {
- if (usesMenuList())
- toRenderMenuList(renderer)->didSetSelectedIndex(listIndex);
- else if (renderer->isListBox())
- toRenderListBox(renderer)->selectionChanged();
- }
+ }
+ if (RenderObject* renderer = this->renderer()) {
+ if (usesMenuList())
+ toRenderMenuList(renderer)->didSetSelectedIndex(listIndex);
+ else if (renderer->isListBox())
+ toRenderListBox(renderer)->selectionChanged();
}
setNeedsValidityCheck();