}
if (m_selected) {
- drawItemStyleOption(painter, widget, QStyle::State_Enabled |
+ const QStyle::State activeState(isActiveWindow() ? QStyle::State_Active : 0);
+ drawItemStyleOption(painter, widget, activeState |
+ QStyle::State_Enabled |
QStyle::State_Selected |
QStyle::State_Item);
}
if (isCurrent()) {
- QStyleOptionViewItemV4 viewItemOption;
- viewItemOption.initFrom(widget);
- viewItemOption.rect = textRect().toRect();
- viewItemOption.state = QStyle::State_Enabled | QStyle::State_Item;
- viewItemOption.viewItemPosition = QStyleOptionViewItemV4::OnlyOne;
- style()->drawPrimitive(QStyle::PE_FrameFocusRect, &viewItemOption, painter, widget);
+ QStyleOptionFocusRect focusRectOption;
+ focusRectOption.initFrom(widget);
+
+ const QRect iconBounds = iconRect().toRect();
+ const QRect textBounds = textRect().toRect();
+ if (iconBounds.bottom() > textBounds.top()) {
+ focusRectOption.rect = textBounds;
+ } else {
+ // See KItemListWidget::drawItemStyleOption(): The selection rectangle
+ // gets decreased.
+ focusRectOption.rect = textBounds.adjusted(1, 1, -1, -1);
+ }
+
+ focusRectOption.state = QStyle::State_Enabled | QStyle::State_Item | QStyle::State_KeyboardFocusChange;
+ if (m_selected) {
+ focusRectOption.state |= QStyle::State_Selected;
+ }
+
+ style()->drawPrimitive(QStyle::PE_FrameFocusRect, &focusRectOption, painter, widget);
}
if (m_hoverOpacity > 0.0) {
m_hoverCache->fill(Qt::transparent);
QPainter pixmapPainter(m_hoverCache);
- drawItemStyleOption(&pixmapPainter, widget, QStyle::State_Enabled |
+ const QStyle::State activeState(isActiveWindow() ? QStyle::State_Active : 0);
+ drawItemStyleOption(&pixmapPainter, widget, activeState |
+ QStyle::State_Enabled |
QStyle::State_MouseOver |
QStyle::State_Item);
}
viewItemOption.initFrom(widget);
viewItemOption.state = styleState;
viewItemOption.viewItemPosition = QStyleOptionViewItemV4::OnlyOne;
+ viewItemOption.showDecorationSelected = true;
- const bool drawMerged = (iconBounds.top() == textBounds.top() &&
- iconBounds.bottom() == textBounds.bottom());
-
- if (drawMerged) {
+ if (iconBounds.bottom() > textBounds.top()) {
viewItemOption.rect = iconBounds | textBounds;
widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewItemOption, painter, widget);
} else {
viewItemOption.rect = iconBounds;
widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewItemOption, painter, widget);
- viewItemOption.rect = textBounds.adjusted(2, 2, -2, -2);
+ viewItemOption.rect = textBounds.adjusted(1, 1, -1, -1);
widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewItemOption, painter, widget);
}
}