summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets
diff options
context:
space:
mode:
authorFan RuiJie <fanruijie@uniontech.com>2021-05-20 17:02:08 +0800
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-06-11 10:23:19 +0000
commit6c4c194b588ad6ad5d6948f048a205656fa9a5be (patch)
treea2ab8913d264701ca650f7398901344adfec9bc1 /src/widgets/widgets
parentab37584cdb6a00b167c2700da04ff0c3b163b61b (diff)
Fix misplacement of placeholder text in QLineEdit with RTL content
The placeholder text was rendered in the wrong position after clicking on the clear button in a QLineEdit with right-to-left content. The button was still taking up space while it was fading out, so the first paintEvent rendered the placeholder with space reserved for the clear button. Once the button gets hidden, no new update was issued, so garbage was left behind. Fix this by not giving a fading-out clear button any margin space. The result of this is that the placeholder text is visible underneath the fading-out clear button. This is preferable to the placeholder text being first rendered next to the fading-out clear button, and then popping to the edge when the clear button is hidden (which would have been the result of issuing a complete update for the line edit at the end of the fade-out animation). Fixes: QTBUG-93742 Done-with: Volker Hilsheimer <volker.hilsheimer@qt.io> Change-Id: Id0429362a60bba6839aa02068b00edb15e3ab8ab Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit dc794f7622bc00f7ca50fab65d6965695d6d2972) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r--src/widgets/widgets/qlineedit_p.cpp14
-rw-r--r--src/widgets/widgets/qlineedit_p.h2
2 files changed, 13 insertions, 3 deletions
diff --git a/src/widgets/widgets/qlineedit_p.cpp b/src/widgets/widgets/qlineedit_p.cpp
index a6b5ed154e..db9940986b 100644
--- a/src/widgets/widgets/qlineedit_p.cpp
+++ b/src/widgets/widgets/qlineedit_p.cpp
@@ -664,10 +664,18 @@ static int effectiveTextMargin(int defaultMargin, const QLineEditPrivate::SideWi
if (widgets.empty())
return defaultMargin;
- return defaultMargin + (parameters.margin + parameters.widgetWidth) *
- int(std::count_if(widgets.begin(), widgets.end(),
+ const auto visibleSideWidgetCount = std::count_if(widgets.begin(), widgets.end(),
[](const QLineEditPrivate::SideWidgetEntry &e) {
- return e.widget->isVisibleTo(e.widget->parentWidget()); }));
+#if QT_CONFIG(animation)
+ // a button that's fading out doesn't get any space
+ if (auto* iconButton = qobject_cast<QLineEditIconButton*>(e.widget))
+ return iconButton->needsSpace();
+
+#endif
+ return e.widget->isVisibleTo(e.widget->parentWidget());
+ });
+
+ return defaultMargin + (parameters.margin + parameters.widgetWidth) * visibleSideWidgetCount;
}
QMargins QLineEditPrivate::effectiveTextMargins() const
diff --git a/src/widgets/widgets/qlineedit_p.h b/src/widgets/widgets/qlineedit_p.h
index 1f4c09ebdf..23f97ef813 100644
--- a/src/widgets/widgets/qlineedit_p.h
+++ b/src/widgets/widgets/qlineedit_p.h
@@ -95,6 +95,8 @@ public:
bool shouldHideWithText() const;
void setHideWithText(bool hide);
+ // m_wasHidden is true unless the button is fading out
+ bool needsSpace() const { return m_wasHidden; }
#endif
protected: