From 012f8a224ab83ba4337bdb99bf7c8566e365c14e Mon Sep 17 00:00:00 2001 From: Oliver Beard Date: Tue, 22 Aug 2023 21:10:42 +0100 Subject: [PATCH] k[standard]itemlistwidget: Account for view focus in selection highlight --- src/kitemviews/kitemlistwidget.cpp | 8 ++++---- src/kitemviews/kstandarditemlistwidget.cpp | 13 ++++++++----- src/kitemviews/kstandarditemlistwidget.h | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index c8b3d2c3c3..cc3cf0dfa6 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -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(); diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp index c4eab6d743..24a9864193 100644 --- a/src/kitemviews/kstandarditemlistwidget.cpp +++ b/src/kitemviews/kstandarditemlistwidget.cpp @@ -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 diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h index 5bfb7df296..d146a02fb9 100644 --- a/src/kitemviews/kstandarditemlistwidget.h +++ b/src/kitemviews/kstandarditemlistwidget.h @@ -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;