]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistcontroller.cpp
Introduce "isExpandable" role
[dolphin.git] / src / kitemviews / kitemlistcontroller.cpp
index 2ff8068ab11610753625074836d12eeac0fd469b..8577bf8630ae0eb033be5ca748c457f6c4e3a14c 100644 (file)
@@ -188,6 +188,16 @@ bool KItemListController::keyPressEvent(QKeyEvent* event)
         default:            break;
         }
     }
+    
+    const bool selectSingleItem = itemCount == 1 &&
+                                  (key == Qt::Key_Home || key == Qt::Key_End  ||
+                                   key == Qt::Key_Up   || key == Qt::Key_Down ||
+                                   key == Qt::Key_Left || key == Qt::Key_Right);
+    if (selectSingleItem) {
+        const int current = m_selectionManager->currentItem();
+        m_selectionManager->setSelected(current);
+        return true;
+    }
 
     switch (key) {
     case Qt::Key_Home:
@@ -252,7 +262,8 @@ bool KItemListController::keyPressEvent(QKeyEvent* event)
             m_selectionManager->setSelected(index, 1, KItemListSelectionManager::Toggle);
             m_selectionManager->beginAnchoredSelection(index);
         } else {
-            m_keyboardManager->addKeys(event->text());
+            const int current = m_selectionManager->currentItem();
+            m_selectionManager->setSelected(current);
         }
         break;
 
@@ -361,6 +372,9 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const
 
     m_pressedMousePos = transform.map(event->pos());
     m_pressedIndex = m_view->itemAt(m_pressedMousePos);
+    if (m_pressedIndex >= 0) {
+        emit itemPressed(m_pressedIndex, event->button());
+    }
 
     if (m_view->isAboveExpansionToggle(m_pressedIndex, m_pressedMousePos)) {
         m_selectionManager->setCurrentItem(m_pressedIndex);
@@ -527,6 +541,10 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, con
         return false;
     }
 
+    if (m_pressedIndex >= 0) {
+        emit itemReleased(m_pressedIndex, event->button());
+    }
+
     const bool isAboveSelectionToggle = m_view->isAboveSelectionToggle(m_pressedIndex, m_pressedMousePos);
     if (isAboveSelectionToggle) {
         m_selectionTogglePressed = false;