diff options
author | Pierre Rossi <pierre.rossi@digia.com> | 2014-06-24 17:40:05 +0200 |
---|---|---|
committer | Pierre Rossi <pierre.rossi@gmail.com> | 2014-07-30 21:25:00 +0200 |
commit | 5f12776a6e3d346bdfea8fbc12df8e643c52c3fd (patch) | |
tree | c3811ed2457e2cfe1128e384657b2ed6ad9bb8a0 /Source/WebCore/html | |
parent | 622bd271367a251b87881d53df45467777ee863a (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.cpp | 16 |
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(); |