┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kstandarditemlistwidget.cpp
diff options
context:
space:
mode:
authorEugene Popov <[email protected]>2024-03-27 10:28:15 +0000
committerMéven Car <[email protected]>2024-03-27 10:28:15 +0000
commit240d33ce17fc531e8bc6638af8f71454fe7c05e6 (patch)
tree11eea661f23034830e9358df1ced907b95b9f0a7 /src/kitemviews/kstandarditemlistwidget.cpp
parent7a7cab61b6fd8d058ca47887f90fa5cd12a3ccca (diff)
Better support for RTL
This MR fixes some issues related to RTL scripts: - wrong layout in Compact View mode - broken horizontal scrolling in Icon View and Details View modes - broken navigation with left and right arrow keys in Details View mode BUG: 484012 BUG: 449493
Diffstat (limited to 'src/kitemviews/kstandarditemlistwidget.cpp')
-rw-r--r--src/kitemviews/kstandarditemlistwidget.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
index 2ac8f4f69..0d3cfed1a 100644
--- a/src/kitemviews/kstandarditemlistwidget.cpp
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
@@ -1132,7 +1132,11 @@ void KStandardItemListWidget::updatePixmapCache()
} else {
// Center horizontally and vertically within the icon-area
const TextInfo *textInfo = m_textInfo.value("text");
- m_pixmapPos.setX(textInfo->pos.x() - 2.0 * padding - (scaledIconSize + m_scaledPixmapSize.width()) / 2.0);
+ if (QApplication::isRightToLeft() && m_layout == CompactLayout) {
+ m_pixmapPos.setX(size().width() - padding - (scaledIconSize + m_scaledPixmapSize.width()) / 2.0);
+ } else {
+ m_pixmapPos.setX(textInfo->pos.x() - 2.0 * padding - (scaledIconSize + m_scaledPixmapSize.width()) / 2.0);
+ }
// Derive icon's vertical center from the center of the text frame, including
// any necessary adjustment if the font's midline is offset from the frame center
@@ -1175,6 +1179,9 @@ void KStandardItemListWidget::updateTextsCache()
textOption.setAlignment(Qt::AlignHCenter);
break;
case CompactLayout:
+ textOption.setAlignment(QApplication::isRightToLeft() ? Qt::AlignRight : Qt::AlignLeft);
+ textOption.setWrapMode(QTextOption::NoWrap);
+ break;
case DetailsLayout:
textOption.setAlignment(Qt::AlignLeft);
textOption.setWrapMode(QTextOption::NoWrap);
@@ -1404,9 +1411,9 @@ void KStandardItemListWidget::updateCompactLayoutTextCache()
const qreal textLinesHeight = qMax(visibleRoles().count(), 1) * lineSpacing;
qreal maximumRequiredTextWidth = 0;
- const qreal x = option.padding * 3 + iconSize();
+ const qreal x = QApplication::isRightToLeft() ? option.padding : option.padding * 3 + iconSize();
qreal y = qRound((widgetHeight - textLinesHeight) / 2);
- const qreal maxWidth = size().width() - x - option.padding;
+ const qreal maxWidth = size().width() - iconSize() - 4 * option.padding;
for (const QByteArray &role : std::as_const(m_sortedVisibleRoles)) {
const QString text = escapeString(roleText(role, values));
TextInfo *textInfo = m_textInfo.value(role);