From: Gabriel de Dietrich Date: Mon, 22 Oct 2012 14:39:35 +0000 (+0200) Subject: Mac: Non-editable QComboBoxes shouldn't get focus by default X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=611c0081ff265354405882b40b323d7cb20ca967;p=profile%2Fivi%2Fqtbase.git Mac: Non-editable QComboBoxes shouldn't get focus by default On Mac, only line edits and list views always get tab focus. It's only when we enable full keyboard access that other controls can get tab focus. When it's not editable, a combobox looks like a button, and it behaves as such in this respect. Change-Id: Ia31b0ad01b48a47c1b81180364681d8614863106 Reviewed-by: Jens Bache-Wiig --- diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 16de0da..74b3dc7 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -919,7 +919,17 @@ QComboBox::QComboBox(QComboBoxPrivate &dd, QWidget *parent) void QComboBoxPrivate::init() { Q_Q(QComboBox); - q->setFocusPolicy(Qt::WheelFocus); +#ifdef Q_OS_MAC + // On Mac, only line edits and list views always get tab focus. It's only + // when we enable full keyboard access that other controls can get tab focus. + // When it's not editable, a combobox looks like a button, and it behaves as + // such in this respect. + if (!q->isEditable()) + q->setFocusPolicy(Qt::TabFocus); + else +#endif + q->setFocusPolicy(Qt::WheelFocus); + q->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed, QSizePolicy::ComboBox)); setLayoutItemMargins(QStyle::SE_ComboBoxLayoutItem); @@ -1655,6 +1665,10 @@ 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(); @@ -1664,6 +1678,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->viewContainer()->updateTopBottomMargin();