]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/selectionmanager.cpp
faster + nicer (thanks to André Wöbbeking for the hint)
[dolphin.git] / src / selectionmanager.cpp
index fecbcbb721e533d56a5c94bc7268393ea7a74b70..47ef16d1a73271a026ad53b23b0af3b3e55ca035 100644 (file)
@@ -66,6 +66,10 @@ void SelectionManager::slotEntered(const QModelIndex& index)
 
         connect(m_view->model(), SIGNAL(rowsRemoved(const QModelIndex&, int, int)),
                 this, SLOT(slotRowsRemoved(const QModelIndex&, int, int)));
+        connect(m_view->selectionModel(),
+                SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
+                this,
+                SLOT(slotSelectionChanged(const QItemSelection&, const QItemSelection&)));
 
         const QRect rect = m_view->visualRect(index);
 
@@ -81,6 +85,10 @@ void SelectionManager::slotEntered(const QModelIndex& index)
         m_toggle->setUrl(KUrl());
         disconnect(m_view->model(), SIGNAL(rowsRemoved(const QModelIndex&, int, int)),
                    this, SLOT(slotRowsRemoved(const QModelIndex&, int, int)));
+        disconnect(m_view->selectionModel(),
+                   SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
+                   this,
+                   SLOT(slotSelectionChanged(const QItemSelection&, const QItemSelection&)));
     }
 }
 
@@ -101,6 +109,7 @@ void SelectionManager::setItemSelected(bool selected)
         } else {
             selModel->select(index, QItemSelectionModel::Deselect);
         }
+        selModel->setCurrentIndex(index, QItemSelectionModel::Current);
     }
 }
 
@@ -112,6 +121,24 @@ void SelectionManager::slotRowsRemoved(const QModelIndex& parent, int start, int
     m_toggle->hide();
 }
 
+void SelectionManager::slotSelectionChanged(const QItemSelection& selected,
+                                            const QItemSelection& deselected)
+{
+    // The selection has been changed outside the scope of the selection manager
+    // (e. g. by the rubberband or the "Select All" action). Take care updating
+    // the state of the toggle button.
+    const QModelIndex index = indexForUrl(m_toggle->url());
+    if (index.isValid()) {
+        if (selected.contains(index)) {
+            m_toggle->setChecked(true);
+        }
+
+        if (deselected.contains(index)) {
+            m_toggle->setChecked(false);
+        }
+    }
+}
+
 KUrl SelectionManager::urlForIndex(const QModelIndex& index) const
 {
     QAbstractProxyModel* proxyModel = static_cast<QAbstractProxyModel*>(m_view->model());