1d0825bca7fe65beaee391d30da42e937db621564Steve Block/* 2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2010 Girish Ramakrishnan <girish@forwardbias.in> 3d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) 4d0825bca7fe65beaee391d30da42e937db621564Steve Block * 5d0825bca7fe65beaee391d30da42e937db621564Steve Block * This library is free software; you can redistribute it and/or 6d0825bca7fe65beaee391d30da42e937db621564Steve Block * modify it under the terms of the GNU Library General Public 7d0825bca7fe65beaee391d30da42e937db621564Steve Block * License as published by the Free Software Foundation; either 8d0825bca7fe65beaee391d30da42e937db621564Steve Block * version 2 of the License, or (at your option) any later version. 9d0825bca7fe65beaee391d30da42e937db621564Steve Block * 10d0825bca7fe65beaee391d30da42e937db621564Steve Block * This library is distributed in the hope that it will be useful, 11d0825bca7fe65beaee391d30da42e937db621564Steve Block * but WITHOUT ANY WARRANTY; without even the implied warranty of 12d0825bca7fe65beaee391d30da42e937db621564Steve Block * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13d0825bca7fe65beaee391d30da42e937db621564Steve Block * Library General Public License for more details. 14d0825bca7fe65beaee391d30da42e937db621564Steve Block * 15d0825bca7fe65beaee391d30da42e937db621564Steve Block * You should have received a copy of the GNU Library General Public License 16d0825bca7fe65beaee391d30da42e937db621564Steve Block * along with this library; see the file COPYING.LIB. If not, write to 17d0825bca7fe65beaee391d30da42e937db621564Steve Block * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18d0825bca7fe65beaee391d30da42e937db621564Steve Block * Boston, MA 02110-1301, USA. 19d0825bca7fe65beaee391d30da42e937db621564Steve Block * 20d0825bca7fe65beaee391d30da42e937db621564Steve Block */ 21d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "config.h" 22d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "QtFallbackWebPopup.h" 23d0825bca7fe65beaee391d30da42e937db621564Steve Block 246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#ifndef QT_NO_COMBOBOX 256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 26dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "ChromeClientQt.h" 27d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "QWebPageClient.h" 28dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "qgraphicswebview.h" 29d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QAbstractItemView> 30d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QApplication> 31d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QGraphicsProxyWidget> 32d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QGraphicsScene> 33d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QGraphicsView> 34d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QInputContext> 35d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QMouseEvent> 36d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QStandardItemModel> 37d0825bca7fe65beaee391d30da42e937db621564Steve Block 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(SYMBIAN_DIALOG_PROVIDERS) 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <BrCtlDialogsProvider.h> 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <BrowserDialogsProvider.h> // S60 platform private header file 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <e32base.h> 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 44d0825bca7fe65beaee391d30da42e937db621564Steve Blocknamespace WebCore { 45d0825bca7fe65beaee391d30da42e937db621564Steve Block 46d0825bca7fe65beaee391d30da42e937db621564Steve BlockQtFallbackWebPopupCombo::QtFallbackWebPopupCombo(QtFallbackWebPopup& ownerPopup) 47d0825bca7fe65beaee391d30da42e937db621564Steve Block : m_ownerPopup(ownerPopup) 48d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 49ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Install an event filter on the view inside the combo box popup to make sure we know 50ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // when the popup got closed. E.g. QComboBox::hidePopup() won't be called when the popup 51ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // is closed by a mouse wheel event outside its window. 52ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block view()->installEventFilter(this); 53d0825bca7fe65beaee391d30da42e937db621564Steve Block} 54d0825bca7fe65beaee391d30da42e937db621564Steve Block 55d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid QtFallbackWebPopupCombo::showPopup() 56d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 57d0825bca7fe65beaee391d30da42e937db621564Steve Block QComboBox::showPopup(); 58d0825bca7fe65beaee391d30da42e937db621564Steve Block m_ownerPopup.m_popupVisible = true; 59d0825bca7fe65beaee391d30da42e937db621564Steve Block} 60d0825bca7fe65beaee391d30da42e937db621564Steve Block 61d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid QtFallbackWebPopupCombo::hidePopup() 62d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifndef QT_NO_IM 64d0825bca7fe65beaee391d30da42e937db621564Steve Block QWidget* activeFocus = QApplication::focusWidget(); 65d0825bca7fe65beaee391d30da42e937db621564Steve Block if (activeFocus && activeFocus == QComboBox::view() 66d0825bca7fe65beaee391d30da42e937db621564Steve Block && activeFocus->testAttribute(Qt::WA_InputMethodEnabled)) { 67d0825bca7fe65beaee391d30da42e937db621564Steve Block QInputContext* qic = activeFocus->inputContext(); 68d0825bca7fe65beaee391d30da42e937db621564Steve Block if (qic) { 69d0825bca7fe65beaee391d30da42e937db621564Steve Block qic->reset(); 70d0825bca7fe65beaee391d30da42e937db621564Steve Block qic->setFocusWidget(0); 71d0825bca7fe65beaee391d30da42e937db621564Steve Block } 72d0825bca7fe65beaee391d30da42e937db621564Steve Block } 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif // QT_NO_IM 74d0825bca7fe65beaee391d30da42e937db621564Steve Block 75d0825bca7fe65beaee391d30da42e937db621564Steve Block QComboBox::hidePopup(); 76d0825bca7fe65beaee391d30da42e937db621564Steve Block 77d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!m_ownerPopup.m_popupVisible) 78d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 79d0825bca7fe65beaee391d30da42e937db621564Steve Block 80d0825bca7fe65beaee391d30da42e937db621564Steve Block m_ownerPopup.m_popupVisible = false; 81dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch emit m_ownerPopup.didHide(); 82ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block m_ownerPopup.destroyPopup(); 83ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block} 84ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 85ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool QtFallbackWebPopupCombo::eventFilter(QObject* watched, QEvent* event) 86ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{ 87ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block Q_ASSERT(watched == view()); 88ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 89ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (event->type() == QEvent::Show && !m_ownerPopup.m_popupVisible) 90ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block showPopup(); 91ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block else if (event->type() == QEvent::Hide && m_ownerPopup.m_popupVisible) 92ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block hidePopup(); 93ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 94ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return false; 95d0825bca7fe65beaee391d30da42e937db621564Steve Block} 96d0825bca7fe65beaee391d30da42e937db621564Steve Block 97d0825bca7fe65beaee391d30da42e937db621564Steve Block// QtFallbackWebPopup 98d0825bca7fe65beaee391d30da42e937db621564Steve Block 99dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochQtFallbackWebPopup::QtFallbackWebPopup(const ChromeClientQt* chromeClient) 100dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch : m_popupVisible(false) 101ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block , m_combo(0) 102dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , m_chromeClient(chromeClient) 103d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 104d0825bca7fe65beaee391d30da42e937db621564Steve Block} 105d0825bca7fe65beaee391d30da42e937db621564Steve Block 106d0825bca7fe65beaee391d30da42e937db621564Steve BlockQtFallbackWebPopup::~QtFallbackWebPopup() 107d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 108ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block destroyPopup(); 109d0825bca7fe65beaee391d30da42e937db621564Steve Block} 110d0825bca7fe65beaee391d30da42e937db621564Steve Block 111dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid QtFallbackWebPopup::show(const QWebSelectData& data) 112d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!pageClient()) 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(SYMBIAN_DIALOG_PROVIDERS) 117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block TRAP_IGNORE(showS60BrowserDialog()); 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#else 119ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 120ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block destroyPopup(); 121ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block m_combo = new QtFallbackWebPopupCombo(*this); 122ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block connect(m_combo, SIGNAL(activated(int)), 123ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block SLOT(activeChanged(int)), Qt::QueuedConnection); 124ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 125dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch populate(data); 1265e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 1272bde8e466a4451c7319e3a072d118917957d6554Steve Block QColor backgroundColor = data.backgroundColor(); 1282bde8e466a4451c7319e3a072d118917957d6554Steve Block QColor foregroundColor = data.foregroundColor(); 1292bde8e466a4451c7319e3a072d118917957d6554Steve Block 1302bde8e466a4451c7319e3a072d118917957d6554Steve Block QPalette palette = m_combo->palette(); 1312bde8e466a4451c7319e3a072d118917957d6554Steve Block if (backgroundColor.isValid()) 1322bde8e466a4451c7319e3a072d118917957d6554Steve Block palette.setColor(QPalette::Background, backgroundColor); 1332bde8e466a4451c7319e3a072d118917957d6554Steve Block if (foregroundColor.isValid()) 1342bde8e466a4451c7319e3a072d118917957d6554Steve Block palette.setColor(QPalette::Foreground, foregroundColor); 1352bde8e466a4451c7319e3a072d118917957d6554Steve Block m_combo->setPalette(palette); 1362bde8e466a4451c7319e3a072d118917957d6554Steve Block 1372bde8e466a4451c7319e3a072d118917957d6554Steve Block 138d0825bca7fe65beaee391d30da42e937db621564Steve Block QRect rect = geometry(); 139d0825bca7fe65beaee391d30da42e937db621564Steve Block if (QGraphicsWebView *webView = qobject_cast<QGraphicsWebView*>(pageClient()->pluginParent())) { 140ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block QGraphicsProxyWidget* proxy = new QGraphicsProxyWidget(webView); 141ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block proxy->setWidget(m_combo); 142ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block proxy->setGeometry(rect); 143d0825bca7fe65beaee391d30da42e937db621564Steve Block } else { 144d0825bca7fe65beaee391d30da42e937db621564Steve Block m_combo->setParent(pageClient()->ownerWidget()); 145d0825bca7fe65beaee391d30da42e937db621564Steve Block m_combo->setGeometry(QRect(rect.left(), rect.top(), 146d0825bca7fe65beaee391d30da42e937db621564Steve Block rect.width(), m_combo->sizeHint().height())); 147d0825bca7fe65beaee391d30da42e937db621564Steve Block 148d0825bca7fe65beaee391d30da42e937db621564Steve Block } 149d0825bca7fe65beaee391d30da42e937db621564Steve Block 150d0825bca7fe65beaee391d30da42e937db621564Steve Block QMouseEvent event(QEvent::MouseButtonPress, QCursor::pos(), Qt::LeftButton, 151d0825bca7fe65beaee391d30da42e937db621564Steve Block Qt::LeftButton, Qt::NoModifier); 152d0825bca7fe65beaee391d30da42e937db621564Steve Block QCoreApplication::sendEvent(m_combo, &event); 153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(SYMBIAN_DIALOG_PROVIDERS) 157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void ResetAndDestroy(TAny* aPtr) 159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RPointerArray<HBufC>* items = reinterpret_cast<RPointerArray<HBufC>* >(aPtr); 161dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block items->ResetAndDestroy(); 162d0825bca7fe65beaee391d30da42e937db621564Steve Block} 163d0825bca7fe65beaee391d30da42e937db621564Steve Block 164dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid QtFallbackWebPopup::showS60BrowserDialog() 165dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 166dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static MBrCtlDialogsProvider* dialogs = CBrowserDialogsProvider::NewL(0); 167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!dialogs) 168dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int size = itemCount(); 171dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CArrayFix<TBrCtlSelectOptionData>* options = new CArrayFixFlat<TBrCtlSelectOptionData>(qMax(1, size)); 172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RPointerArray<HBufC> items(qMax(1, size)); 173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CleanupStack::PushL(TCleanupItem(&ResetAndDestroy, &items)); 174dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (int i = 0; i < size; i++) { 176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (itemType(i) == Separator) { 177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block TBrCtlSelectOptionData data(_L("----------"), false, false, false); 178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block options->AppendL(data); 179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else { 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block HBufC16* itemStr = HBufC16::NewL(itemText(i).length()); 181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block itemStr->Des().Copy((const TUint16*)itemText(i).utf16(), itemText(i).length()); 182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CleanupStack::PushL(itemStr); 183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block TBrCtlSelectOptionData data(*itemStr, i == currentIndex(), false, itemIsEnabled(i)); 184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block options->AppendL(data); 185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block items.AppendL(itemStr); 186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CleanupStack::Pop(); 187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block dialogs->DialogSelectOptionL(KNullDesC(), (TBrCtlSelectOptionType)(ESelectTypeSingle | ESelectTypeWithFindPane), *options); 191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CleanupStack::PopAndDestroy(&items); 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 194dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int newIndex; 195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (newIndex = 0; newIndex < options->Count() && !options->At(newIndex).IsSelected(); newIndex++) {} 196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (newIndex == options->Count()) 197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block newIndex = currentIndex(); 198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_popupVisible = false; 200dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block popupDidHide(); 201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (currentIndex() != newIndex && newIndex >= 0) 203dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block valueChanged(newIndex); 204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block delete options; 206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 209d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid QtFallbackWebPopup::hide() 210d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 211ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Destroying the QComboBox here cause problems if the popup is in the 212ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // middle of its show animation. Instead we rely on the fact that the 213ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Qt::Popup window will hide itself on mouse events outside its window. 214d0825bca7fe65beaee391d30da42e937db621564Steve Block} 215d0825bca7fe65beaee391d30da42e937db621564Steve Block 216ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockvoid QtFallbackWebPopup::destroyPopup() 217d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 218ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (m_combo) { 219ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block m_combo->deleteLater(); 220ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block m_combo = 0; 221ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block } 222ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block} 223d0825bca7fe65beaee391d30da42e937db621564Steve Block 224dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid QtFallbackWebPopup::populate(const QWebSelectData& data) 225ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{ 226d0825bca7fe65beaee391d30da42e937db621564Steve Block QStandardItemModel* model = qobject_cast<QStandardItemModel*>(m_combo->model()); 227d0825bca7fe65beaee391d30da42e937db621564Steve Block Q_ASSERT(model); 228d0825bca7fe65beaee391d30da42e937db621564Steve Block 229f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#if !defined(Q_OS_SYMBIAN) 230d0825bca7fe65beaee391d30da42e937db621564Steve Block m_combo->setFont(font()); 231d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 232dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 233dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch int currentIndex = -1; 234dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch for (int i = 0; i < data.itemCount(); ++i) { 235dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch switch (data.itemType(i)) { 236dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch case QWebSelectData::Separator: 237d0825bca7fe65beaee391d30da42e937db621564Steve Block m_combo->insertSeparator(i); 238d0825bca7fe65beaee391d30da42e937db621564Steve Block break; 239dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch case QWebSelectData::Group: 240dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch m_combo->insertItem(i, data.itemText(i)); 241d0825bca7fe65beaee391d30da42e937db621564Steve Block model->item(i)->setEnabled(false); 242d0825bca7fe65beaee391d30da42e937db621564Steve Block break; 243dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch case QWebSelectData::Option: 244dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch m_combo->insertItem(i, data.itemText(i)); 245dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch model->item(i)->setEnabled(data.itemIsEnabled(i)); 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef QT_NO_TOOLTIP 24768513a70bcd92384395513322f1b801e7bf9c729Steve Block model->item(i)->setToolTip(data.itemToolTip(i)); 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 2492bde8e466a4451c7319e3a072d118917957d6554Steve Block model->item(i)->setBackground(data.itemBackgroundColor(i)); 2502bde8e466a4451c7319e3a072d118917957d6554Steve Block model->item(i)->setForeground(data.itemForegroundColor(i)); 251dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch if (data.itemIsSelected(i)) 252dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch currentIndex = i; 253d0825bca7fe65beaee391d30da42e937db621564Steve Block break; 254d0825bca7fe65beaee391d30da42e937db621564Steve Block } 255d0825bca7fe65beaee391d30da42e937db621564Steve Block } 256dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 257dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch if (currentIndex >= 0) 258dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch m_combo->setCurrentIndex(currentIndex); 259d0825bca7fe65beaee391d30da42e937db621564Steve Block} 260d0825bca7fe65beaee391d30da42e937db621564Steve Block 261d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid QtFallbackWebPopup::activeChanged(int index) 262d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 263d0825bca7fe65beaee391d30da42e937db621564Steve Block if (index < 0) 264d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 265d0825bca7fe65beaee391d30da42e937db621564Steve Block 266dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch emit selectItem(index, false, false); 267dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 268dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 269dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochQWebPageClient* QtFallbackWebPopup::pageClient() const 270dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 271dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return m_chromeClient->platformPageClient(); 272d0825bca7fe65beaee391d30da42e937db621564Steve Block} 273d0825bca7fe65beaee391d30da42e937db621564Steve Block 274d0825bca7fe65beaee391d30da42e937db621564Steve Block} 2756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 2766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif // QT_NO_COMBOBOX 277