diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index c261bf1d25..e7d2951b9f 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -522,7 +522,7 @@ void KItemListWidget::drawItemStyleOption(QPainter* painter, QWidget* widget, QS viewItemOption.state = styleState; viewItemOption.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; viewItemOption.showDecorationSelected = true; - viewItemOption.rect = textRect().toRect(); + viewItemOption.rect = selectionRect().toRect(); widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewItemOption, painter, widget); } diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h index a06bb5c9c7..c086ee6d33 100644 --- a/src/kitemviews/kitemlistwidget.h +++ b/src/kitemviews/kitemlistwidget.h @@ -163,6 +163,11 @@ public: */ virtual QRectF textFocusRect() const; + /** + * @return Rectangle around which a selection box should be drawn if the item is selected. + */ + virtual QRectF selectionRect() const = 0; + /** * @return Rectangle for the selection-toggle that is used to select or deselect an item. * Per default an empty rectangle is returned which means that no selection-toggle diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp index e0375480e0..998acc0665 100644 --- a/src/kitemviews/kstandarditemlistwidget.cpp +++ b/src/kitemviews/kstandarditemlistwidget.cpp @@ -494,6 +494,29 @@ QRectF KStandardItemListWidget::textFocusRect() const return m_textRect; } +QRectF KStandardItemListWidget::selectionRect() const +{ + const_cast(this)->triggerCacheRefreshing(); + + switch (m_layout) { + case IconsLayout: + return m_textRect; + + case CompactLayout: + case DetailsLayout: { + const int padding = styleOption().padding; + QRectF adjustedIconRect = iconRect().adjusted(-padding, -padding, padding, padding); + return adjustedIconRect | m_textRect; + } + + default: + Q_ASSERT(false); + break; + } + + return m_textRect; +} + QRectF KStandardItemListWidget::expansionToggleRect() const { const_cast(this)->triggerCacheRefreshing(); @@ -945,7 +968,7 @@ void KStandardItemListWidget::updatePixmapCache() KIconEffect::semiTransparent(m_pixmap); } - if (isSelected()) { + if (m_layout == IconsLayout && isSelected()) { const QColor color = palette().brush(QPalette::Normal, QPalette::Highlight).color(); QImage image = m_pixmap.toImage(); KIconEffect::colorize(image, color, 0.8f); diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h index 4f7a9136e0..403794fc3e 100644 --- a/src/kitemviews/kstandarditemlistwidget.h +++ b/src/kitemviews/kstandarditemlistwidget.h @@ -109,6 +109,7 @@ public: virtual QRectF iconRect() const; virtual QRectF textRect() const; virtual QRectF textFocusRect() const; + virtual QRectF selectionRect() const; virtual QRectF expansionToggleRect() const; virtual QRectF selectionToggleRect() const; virtual QPixmap createDragPixmap(const QStyleOptionGraphicsItem* option, QWidget* widget = 0);