diff options
-rw-r--r-- | src/widgets/widgets/qlineedit.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qlineedit_p.cpp | 10 | ||||
-rw-r--r-- | src/widgets/widgets/qlineedit_p.h | 1 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp | 3 |
4 files changed, 16 insertions, 0 deletions
diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index 0bc7b7c2e3..df5ae0171c 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -495,6 +495,7 @@ void QLineEdit::setClearButtonEnabled(bool enable) return; if (enable) { QAction *clearAction = new QAction(d->clearButtonIcon(), QString(), this); + clearAction->setEnabled(!isReadOnly()); clearAction->setObjectName(QLatin1String(clearButtonActionNameC)); d->addAction(clearAction, 0, QLineEdit::TrailingPosition, QLineEditPrivate::SideWidgetClearButton | QLineEditPrivate::SideWidgetFadeInWithText); } else { @@ -1336,6 +1337,7 @@ void QLineEdit::setReadOnly(bool enable) Q_D(QLineEdit); if (d->control->isReadOnly() != enable) { d->control->setReadOnly(enable); + d->setClearButtonEnabled(!enable); setAttribute(Qt::WA_MacShowFocusRect, !enable); setAttribute(Qt::WA_InputMethodEnabled, d->shouldEnableInputMethod()); #ifndef QT_NO_CURSOR diff --git a/src/widgets/widgets/qlineedit_p.cpp b/src/widgets/widgets/qlineedit_p.cpp index c066f74c5a..891839ed56 100644 --- a/src/widgets/widgets/qlineedit_p.cpp +++ b/src/widgets/widgets/qlineedit_p.cpp @@ -376,6 +376,16 @@ QIcon QLineEditPrivate::clearButtonIcon() const return QIcon(q->style()->standardPixmap(QStyle::SP_LineEditClearButton, &styleOption, q)); } +void QLineEditPrivate::setClearButtonEnabled(bool enabled) +{ + foreach (const SideWidgetEntry &e, trailingSideWidgets) { + if (e.flags & SideWidgetClearButton) { + e.action->setEnabled(enabled); + break; + } + } +} + void QLineEditPrivate::positionSideWidgets() { Q_Q(QLineEdit); diff --git a/src/widgets/widgets/qlineedit_p.h b/src/widgets/widgets/qlineedit_p.h index e807c7fc52..181a23449b 100644 --- a/src/widgets/widgets/qlineedit_p.h +++ b/src/widgets/widgets/qlineedit_p.h @@ -199,6 +199,7 @@ public: void removeAction(QAction *action); QSize iconSize() const; QIcon clearButtonIcon() const; + void setClearButtonEnabled(bool enabled); void positionSideWidgets(); inline bool hasSideWidgets() const { return !leadingSideWidgets.isEmpty() || !trailingSideWidgets.isEmpty(); } inline const SideWidgetEntryList &leftSideWidgetList() const diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index 3000aad9ce..a9f5cb686c 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -4097,6 +4097,9 @@ void tst_QLineEdit::clearButton() QTRY_COMPARE(filterModel->rowCount(), 1); // matches 'ab' QTest::mouseClick(clearButton, Qt::LeftButton, 0, QRect(QPoint(0, 0), clearButton->size()).center()); QTRY_COMPARE(filterModel->rowCount(), 3); + + filterLineEdit->setReadOnly(true); // QTBUG-34315 + QVERIFY(!clearButton->isEnabled()); } void tst_QLineEdit::sideWidgets() |