summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets/qcombobox.cpp
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2014-07-01 18:41:14 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-07-01 18:41:14 +0200
commite6a94778d0c26b59e367e9f9fe4f401725fc9c4e (patch)
treec7597213d7eac14863bc3cfd7bccd247c8950710 /src/widgets/widgets/qcombobox.cpp
parent605ba2c2268b2dce3d0b06899101d03a67e7f251 (diff)
parenta09a8d509a69ed16d8afbe15296b8332cacd6c66 (diff)
Merge "Merge remote-tracking branch 'origin/5.3' into dev" into refs/staging/dev
Diffstat (limited to 'src/widgets/widgets/qcombobox.cpp')
-rw-r--r--src/widgets/widgets/qcombobox.cpp45
1 files changed, 28 insertions, 17 deletions
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index f857f4eac0..eae0cbbd06 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtWidgets module of the Qt Toolkit.
@@ -1085,6 +1085,19 @@ void QComboBoxPrivate::updateViewContainerPaletteAndOpacity()
lineEdit->setPalette(q->palette());
}
+void QComboBoxPrivate::updateFocusPolicy()
+{
+#ifdef Q_OS_OSX
+ Q_Q(QComboBox);
+
+ // See comment in QComboBoxPrivate::init()
+ if (q->isEditable())
+ q->setFocusPolicy(Qt::WheelFocus);
+ else
+ q->setFocusPolicy(Qt::TabFocus);
+#endif
+}
+
/*!
Initialize \a option with the values from this QComboBox. This method
is useful for subclasses when they need a QStyleOptionComboBox, but don't want
@@ -1691,10 +1704,6 @@ void QComboBox::setEditable(bool editable)
}
QLineEdit *le = new QLineEdit(this);
setLineEdit(le);
-#ifdef Q_OS_MAC
- // See comment in QComboBoxPrivate::init()
- setFocusPolicy(Qt::WheelFocus);
-#endif
} else {
if (style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, this)) {
d->viewContainer()->updateScrollers();
@@ -1704,12 +1713,10 @@ void QComboBox::setEditable(bool editable)
d->lineEdit->hide();
d->lineEdit->deleteLater();
d->lineEdit = 0;
-#ifdef Q_OS_MAC
- // See comment in QComboBoxPrivate::init()
- setFocusPolicy(Qt::TabFocus);
-#endif
}
+ d->updateFocusPolicy();
+
d->viewContainer()->updateTopBottomMargin();
if (!testAttribute(Qt::WA_Resized))
adjustSize();
@@ -1743,6 +1750,7 @@ void QComboBox::setLineEdit(QLineEdit *edit)
connect(d->lineEdit, SIGNAL(textChanged(QString)), this, SIGNAL(currentTextChanged(QString)));
d->lineEdit->setFrame(false);
d->lineEdit->setContextMenuPolicy(Qt::NoContextMenu);
+ d->updateFocusPolicy();
d->lineEdit->setFocusProxy(this);
d->lineEdit->setAttribute(Qt::WA_MacShowFocusRect, false);
#ifndef QT_NO_COMPLETER
@@ -2055,7 +2063,7 @@ void QComboBoxPrivate::setCurrentIndex(const QModelIndex &mi)
if (indexChanged)
currentIndex = QPersistentModelIndex(normalized);
if (lineEdit) {
- QString newText = q->itemText(normalized.row());
+ const QString newText = itemText(normalized);
if (lineEdit->text() != newText)
lineEdit->setText(newText);
updateLineEditGeometry();
@@ -2377,6 +2385,16 @@ QSize QComboBox::sizeHint() const
}
#ifdef Q_OS_OSX
+
+namespace {
+struct IndexSetter {
+ int index;
+ QComboBox *cb;
+
+ void operator()(void) { cb->setCurrentIndex(index); }
+};
+}
+
/*!
* \internal
*
@@ -2391,13 +2409,6 @@ bool QComboBoxPrivate::showNativePopup()
if (QPlatformMenu *menu = theme->createPlatformMenu()) {
int itemsCount = q->count();
- struct IndexSetter {
- int index;
- QComboBox *cb;
-
- void operator()(void) { cb->setCurrentIndex(index); }
- };
-
QList<QPlatformMenuItem *> items;
items.reserve(itemsCount);
QPlatformMenuItem *currentItem = 0;