summaryrefslogtreecommitdiff
path: root/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp')
-rw-r--r--Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp31
1 files changed, 13 insertions, 18 deletions
diff --git a/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp b/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp
index 5d5906c76..c563ad25f 100644
--- a/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp
+++ b/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp
@@ -120,13 +120,11 @@ InputHandler::InputHandler(WebPagePrivate* page)
, m_composingTextEnd(0)
, m_pendingKeyboardVisibilityChange(NoChange)
, m_delayKeyboardVisibilityChange(false)
- , m_selectClient(0)
{
}
InputHandler::~InputHandler()
{
- delete m_selectClient;
}
static BlackBerryInputType convertInputType(const HTMLInputElement* inputElement)
@@ -1142,23 +1140,24 @@ bool InputHandler::openSelectPopup(HTMLSelectElement* select)
ScopeArray<WebString> labels;
labels.reset(new WebString[size]);
- if (!size) {
- if (!m_selectClient)
- m_selectClient = new SelectPopupClient(multiple, size, labels, 0, 0, 0, m_webPage, select);
- else
- m_selectClient->update(multiple, size, labels, enableds, itemTypes, selecteds, m_webPage, select);
- } else {
- bool* enableds = new bool[size];
- int* itemTypes = new int[size];
- bool* selecteds = new bool[size];
+ // Check if popup already exists, close it if does.
+ m_webPage->m_page->chrome()->client()->closePagePopup(0);
+
+ bool* enableds = 0;
+ int* itemTypes = 0;
+ bool* selecteds = 0;
+ if (size) {
+ enableds = new bool[size];
+ itemTypes = new int[size];
+ selecteds = new bool[size];
for (int i = 0; i < size; i++) {
if (listItems[i]->hasTagName(HTMLNames::optionTag)) {
HTMLOptionElement* option = static_cast<HTMLOptionElement*>(listItems[i]);
labels[i] = option->textIndentedToRespectGroupLabel();
enableds[i] = option->disabled() ? 0 : 1;
selecteds[i] = option->selected();
- itemTypes[i] = TypeOption;
+ itemTypes[i] = option->parentNode() && option->parentNode()->hasTagName(HTMLNames::optgroupTag) ? TypeOptionInGroup : TypeOption;
} else if (listItems[i]->hasTagName(HTMLNames::optgroupTag)) {
HTMLOptGroupElement* optGroup = static_cast<HTMLOptGroupElement*>(listItems[i]);
labels[i] = optGroup->groupLabelText();
@@ -1171,15 +1170,11 @@ bool InputHandler::openSelectPopup(HTMLSelectElement* select)
itemTypes[i] = TypeSeparator;
}
}
-
- if (!m_selectClient)
- m_selectClient = new SelectPopupClient(multiple, size, labels, enableds, itemTypes, selecteds, m_webPage, select);
- else
- m_selectClient->update(multiple, size, labels, enableds, itemTypes, selecteds, m_webPage, select);
}
+ SelectPopupClient* selectClient = new SelectPopupClient(multiple, size, labels, enableds, itemTypes, selecteds, m_webPage, select);
WebCore::IntRect elementRectInRootView = select->document()->view()->contentsToRootView(select->getRect());
- m_webPage->m_page->chrome()->client()->openPagePopup(m_selectClient, elementRectInRootView);
+ m_webPage->m_page->chrome()->client()->openPagePopup(selectClient, elementRectInRootView);
return true;
}