]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kstandarditemlistwidget.cpp
Fix view mode-specific settings not always applying
[dolphin.git] / src / kitemviews / kstandarditemlistwidget.cpp
index 247581a4ec374ed4e2e0921a1a5ebea13c4d0ec7..ddc7c298811e7d57820483c7163ae601855e499a 100644 (file)
@@ -21,7 +21,6 @@
 #include <QGraphicsScene>
 #include <QGraphicsSceneResizeEvent>
 #include <QGraphicsView>
-#include <QGuiApplication>
 #include <QPixmapCache>
 #include <QStyleOption>
 
@@ -242,6 +241,7 @@ KStandardItemListWidget::KStandardItemListWidget(KItemListWidgetInformant* infor
     m_customizedFont(),
     m_customizedFontMetrics(m_customizedFont),
     m_isExpandable(false),
+    m_highlightEntireRow(false),
     m_supportsItemExpanding(false),
     m_dirtyLayout(true),
     m_dirtyContent(true),
@@ -509,7 +509,7 @@ QRectF KStandardItemListWidget::selectionRect() const
         QRectF adjustedIconRect = iconRect().adjusted(-padding, -padding, padding, padding);
         QRectF result = adjustedIconRect | m_textRect;
         if (m_highlightEntireRow) {
-            result.setRight(m_columnWidthSum + leadingPadding());
+            result.setRight(m_columnWidthSum + sidePadding());
         }
         return result;
     }
@@ -727,7 +727,7 @@ void KStandardItemListWidget::columnWidthChanged(const QByteArray& role,
     m_dirtyLayout = true;
 }
 
-void KStandardItemListWidget::leadingPaddingChanged(qreal padding) {
+void KStandardItemListWidget::sidePaddingChanged(qreal padding) {
     Q_UNUSED(padding)
     m_dirtyLayout = true;
 }
@@ -957,7 +957,7 @@ void KStandardItemListWidget::updateExpansionArea()
             const qreal inc = (widgetHeight - widgetIconSize) / 2;
             const qreal x = expandedParentsCount * widgetHeight + inc;
             const qreal y = inc;
-            const qreal xPadding = m_highlightEntireRow ? leadingPadding() : 0;
+            const qreal xPadding = m_highlightEntireRow ? sidePadding() : 0;
             m_expansionArea = QRectF(xPadding + x, y, widgetIconSize, widgetIconSize);
             return;
         }
@@ -1104,7 +1104,16 @@ void KStandardItemListWidget::updatePixmapCache()
 
     }
 
-    m_iconRect = QRectF(m_pixmapPos, QSizeF(m_scaledPixmapSize));
+    if (m_layout == IconsLayout) {
+        m_iconRect = QRectF(m_pixmapPos, QSizeF(m_scaledPixmapSize));
+    } else {
+        const qreal widthOffset = widgetIconSize - m_scaledPixmapSize.width();
+        const qreal heightOffset = widgetIconSize - m_scaledPixmapSize.height();
+        const QPointF squareIconPos(m_pixmapPos.x() - 0.5 * widthOffset,
+                                    m_pixmapPos.y() - 0.5 * heightOffset);
+        const QSizeF squareIconSize(widgetIconSize, widgetIconSize);
+        m_iconRect = QRectF(squareIconPos, squareIconSize);
+    }
 
     // Prepare the pixmap that is used when the item gets hovered
     if (isHovered()) {
@@ -1397,7 +1406,7 @@ void KStandardItemListWidget::updateDetailsLayoutTextCache()
     if (m_supportsItemExpanding) {
         firstColumnInc += (m_expansionArea.left() + m_expansionArea.right() + widgetHeight) / 2;
     } else {
-        firstColumnInc += option.padding + leadingPadding();
+        firstColumnInc += option.padding + sidePadding();
     }
 
     qreal x = firstColumnInc;
@@ -1413,7 +1422,7 @@ void KStandardItemListWidget::updateDetailsLayoutTextCache()
 
         const bool isTextRole = (role == "text");
         if (isTextRole) {
-            availableTextWidth -= firstColumnInc - leadingPadding();
+            availableTextWidth -= firstColumnInc - sidePadding();
         }
 
         if (requiredWidth > availableTextWidth) {
@@ -1435,7 +1444,7 @@ void KStandardItemListWidget::updateDetailsLayoutTextCache()
 
             // The column after the name should always be aligned on the same x-position independent
             // from the expansion-level shown in the name column
-            x -= firstColumnInc - leadingPadding();
+            x -= firstColumnInc - sidePadding();
         } else if (isRoleRightAligned(role)) {
             textInfo->pos.rx() += roleWidth - requiredWidth - columnWidthInc;
         }
@@ -1447,7 +1456,7 @@ void KStandardItemListWidget::updateAdditionalInfoTextColor()
     QColor c1;
     if (m_customTextColor.isValid()) {
         c1 = m_customTextColor;
-    } else if (isSelected()) {
+    } else if (isSelected() && (m_layout != DetailsLayout || m_highlightEntireRow)) {
         // The detail text colour needs to match the main text (HighlightedText) for the same level
         // of readability. We short circuit early here to avoid interpolating with another colour.
         m_additionalInfoTextColor = styleOption().palette.color(QPalette::HighlightedText);