summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElvis Angelaccio <elvis.angelaccio@kde.org>2017-04-18 10:19:12 +0200
committerElvis Angelaccio <elvis.angelaccio@kde.org>2017-04-19 08:49:49 +0000
commit288bfb0bbd778fdfa6ac9fdcdc1afc19ec13aeaf (patch)
tree5c944dbacc6e2e291ed342a6ec9be7e12564ba68
parent254f35ce98bebd8f4446fec66bb50f2126b61c28 (diff)
QLineEdit: Make the clear button always the leftmost button
QLineEditIconButton currently draws a fully transparent pixmap in its paintEvent() function, when the line edit is empty. This does not work when there is another trailing QAction that is visible even when the line edit has no text, as reported in QTBUG-59957. To fix this issue, make sure the clear button is always the leftmost button. Task-number: QTBUG-59957 Change-Id: I8a4f96aae07856aa0e1053ebb338ba9bdf052a16 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
-rw-r--r--src/widgets/widgets/qlineedit_p.cpp11
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp23
2 files changed, 34 insertions, 0 deletions
diff --git a/src/widgets/widgets/qlineedit_p.cpp b/src/widgets/widgets/qlineedit_p.cpp
index 7c5ba79cb6..e1c7a4e280 100644
--- a/src/widgets/widgets/qlineedit_p.cpp
+++ b/src/widgets/widgets/qlineedit_p.cpp
@@ -533,6 +533,17 @@ QWidget *QLineEditPrivate::addAction(QAction *newAction, QAction *before, QLineE
return nullptr;
#endif
}
+
+ // QTBUG-59957: clear button should be the leftmost action.
+ if (!before && !(flags & SideWidgetClearButton) && position == QLineEdit::TrailingPosition) {
+ for (const SideWidgetEntry &e : trailingSideWidgets) {
+ if (e.flags & SideWidgetClearButton) {
+ before = e.action;
+ break;
+ }
+ }
+ }
+
// If there is a 'before' action, it takes preference
// There's a bug in GHS compiler that causes internal error on the following code.
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
index 330ce3a836..b7628b30e9 100644
--- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
@@ -310,6 +310,7 @@ private slots:
void shortcutOverrideOnReadonlyLineEdit_data();
void shortcutOverrideOnReadonlyLineEdit();
+ void QTBUG59957_clearButtonLeftmostAction();
protected slots:
void editingFinished();
@@ -4612,5 +4613,27 @@ void tst_QLineEdit::shortcutOverrideOnReadonlyLineEdit()
QCOMPARE(spy.count(), activationCount);
}
+void tst_QLineEdit::QTBUG59957_clearButtonLeftmostAction()
+{
+ QLineEdit lineEdit;
+ lineEdit.setClearButtonEnabled(true);
+
+ auto clearButton = lineEdit.findChild<QLineEditIconButton *>();
+ QVERIFY(clearButton);
+
+ QPixmap pixmap(16, 16);
+ lineEdit.addAction(QIcon(pixmap), QLineEdit::TrailingPosition);
+ lineEdit.addAction(QIcon(pixmap), QLineEdit::TrailingPosition);
+
+ lineEdit.show();
+
+ const auto buttons = lineEdit.findChildren<QLineEditIconButton *>();
+ for (const auto button : buttons) {
+ if (button == clearButton)
+ continue;
+ QVERIFY(clearButton->x() < button->x());
+ }
+}
+
QTEST_MAIN(tst_QLineEdit)
#include "tst_qlineedit.moc"