]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistwidget.cpp
Don't select items if the selection toggle has been disabled
[dolphin.git] / src / kitemviews / kitemlistwidget.cpp
index cf8b54c0cfec7bce7771d5886c9327d1f0a92b30..cd2bf4d40ce6851414aad5a9c34c77e2badf3a9b 100644 (file)
@@ -111,18 +111,33 @@ void KItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
     }
 
     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) {
@@ -133,7 +148,9 @@ void KItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
             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);
         }
@@ -420,18 +437,16 @@ void KItemListWidget::drawItemStyleOption(QPainter* painter, QWidget* widget, QS
     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);
     }
 }