Fix wrong text eliding in some corner cases.

BUG: 337104
FIXED-IN: 4.14.0
REVIEW: 119546
This commit is contained in:
Emmanuel Pescosta 2014-08-04 19:43:07 +02:00
parent a31b836479
commit 18a976c435

View file

@ -1136,14 +1136,24 @@ void KStandardItemListWidget::updateIconsLayoutTextCache()
const int textLength = line.textStart() + line.textLength(); const int textLength = line.textStart() + line.textLength();
if (textLength < nameText.length()) { if (textLength < nameText.length()) {
// Elide the last line of the text // Elide the last line of the text
QString lastTextLine = nameText.mid(line.textStart()); qreal elidingWidth = maxWidth;
lastTextLine = m_customizedFontMetrics.elidedText(lastTextLine, qreal lastLineWidth;
Qt::ElideRight, do {
maxWidth); QString lastTextLine = nameText.mid(line.textStart());
const QString elidedText = nameText.left(line.textStart()) + lastTextLine; lastTextLine = m_customizedFontMetrics.elidedText(lastTextLine,
nameTextInfo->staticText.setText(elidedText); Qt::ElideRight,
elidingWidth);
const QString elidedText = nameText.left(line.textStart()) + lastTextLine;
nameTextInfo->staticText.setText(elidedText);
lastLineWidth = m_customizedFontMetrics.boundingRect(lastTextLine).width();
// We do the text eliding in a loop with decreasing width (1 px / iteration)
// to avoid problems related to different width calculation code paths
// within Qt. (see bug 337104)
elidingWidth -= 1.0;
} while (lastLineWidth > maxWidth);
const qreal lastLineWidth = m_customizedFontMetrics.boundingRect(lastTextLine).width();
nameWidth = qMax(nameWidth, lastLineWidth); nameWidth = qMax(nameWidth, lastLineWidth);
} }
break; break;