]> cloud.milkyroute.net Git - dolphin.git/commitdiff
k[standard]itemlistwidget: Account for view focus in selection highlight
authorOliver Beard <olib141@outlook.com>
Tue, 22 Aug 2023 20:10:42 +0000 (21:10 +0100)
committerMéven Car <meven@kde.org>
Sat, 2 Sep 2023 05:41:49 +0000 (07:41 +0200)
src/kitemviews/kitemlistwidget.cpp
src/kitemviews/kstandarditemlistwidget.cpp
src/kitemviews/kstandarditemlistwidget.h

index c8b3d2c3c38d65998d748ec2f9b2b99739239ce2..cc3cf0dfa69813177ee4c81faa30c6c7a1a0f793 100644 (file)
@@ -111,11 +111,11 @@ void KItemListWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *o
     }
 
     if (m_selected && m_editedRole.isEmpty()) {
-        const QStyle::State activeState(isActiveWindow() ? QStyle::State_Active : 0);
+        const QStyle::State activeState(isActiveWindow() && widget->hasFocus() ? QStyle::State_Active : 0);
         drawItemStyleOption(painter, widget, activeState | QStyle::State_Enabled | QStyle::State_Selected | QStyle::State_Item);
     }
 
-    if (m_current && m_editedRole.isEmpty()) {
+    if (m_current && m_editedRole.isEmpty() && widget->hasFocus()) {
         QStyleOptionFocusRect focusRectOption;
         initStyleOption(&focusRectOption);
         focusRectOption.rect = textFocusRect().toRect();
@@ -135,8 +135,8 @@ void KItemListWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *o
             m_hoverCache->fill(Qt::transparent);
 
             QPainter pixmapPainter(m_hoverCache);
-            const QStyle::State activeState(isActiveWindow() ? QStyle::State_Active : 0);
-            drawItemStyleOption(&pixmapPainter, widget, activeState | QStyle::State_Enabled | QStyle::State_MouseOver | QStyle::State_Item);
+            const QStyle::State activeState(isActiveWindow() && widget->hasFocus() ? QStyle::State_Active | QStyle::State_Enabled : 0);
+            drawItemStyleOption(&pixmapPainter, widget, activeState | QStyle::State_MouseOver | QStyle::State_Item);
         }
 
         const qreal opacity = painter->opacity();
index c4eab6d74317166f063a8521941d3ebbf239efbc..24a9864193640488c6052bdbf2b42ed9852493fd 100644 (file)
@@ -386,7 +386,7 @@ void KStandardItemListWidget::paint(QPainter *painter, const QStyleOptionGraphic
     }
 
     painter->setFont(m_customizedFont);
-    painter->setPen(textColor());
+    painter->setPen(textColor(widget));
     const TextInfo *textInfo = m_textInfo.value("text");
 
     if (!textInfo) {
@@ -645,7 +645,7 @@ void KStandardItemListWidget::setTextColor(const QColor &color)
     }
 }
 
-QColor KStandardItemListWidget::textColor() const
+QColor KStandardItemListWidget::textColor(QWidget *widget) const
 {
     if (!isSelected()) {
         if (m_isHidden) {
@@ -655,7 +655,7 @@ QColor KStandardItemListWidget::textColor() const
         }
     }
 
-    const QPalette::ColorGroup group = isActiveWindow() ? QPalette::Active : QPalette::Inactive;
+    const QPalette::ColorGroup group = isActiveWindow() && widget->hasFocus() ? QPalette::Active : QPalette::Inactive;
     const QPalette::ColorRole role = isSelected() ? QPalette::HighlightedText : normalTextColorRole();
     return styleOption().palette.color(group, role);
 }
@@ -1015,8 +1015,11 @@ void KStandardItemListWidget::updatePixmapCache()
                 iconName = QStringLiteral("unknown");
             }
             const QStringList overlays = values["iconOverlays"].toStringList();
-            m_pixmap =
-                pixmapForIcon(iconName, overlays, maxIconHeight, m_layout != IconsLayout && isActiveWindow() && isSelected() ? QIcon::Selected : QIcon::Normal);
+            const bool hasFocus = scene()->views()[0]->parentWidget()->hasFocus();
+            m_pixmap = pixmapForIcon(iconName,
+                                     overlays,
+                                     maxIconHeight,
+                                     m_layout != IconsLayout && isActiveWindow() && isSelected() && hasFocus ? QIcon::Selected : QIcon::Normal);
 
         } else if (m_pixmap.width() / m_pixmap.devicePixelRatio() != maxIconWidth || m_pixmap.height() / m_pixmap.devicePixelRatio() != maxIconHeight) {
             // A custom pixmap has been applied. Assure that the pixmap
index 5bfb7df29689568ac987dea45775992d5dcb6207..d146a02fb9b8ffa96cc0aeaf3d24a186232cc236 100644 (file)
@@ -139,7 +139,7 @@ protected:
     virtual QPalette::ColorRole normalTextColorRole() const;
 
     void setTextColor(const QColor &color);
-    QColor textColor() const;
+    QColor textColor(QWidget *widget) const;
 
     void setOverlay(const QPixmap &overlay);
     QPixmap overlay() const;