]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/selectionmanager.cpp
The &-shortcut from another action is not set until the action has been shown at...
[dolphin.git] / src / views / selectionmanager.cpp
index 7353e5a39e940968cda76f50520ec39707519a92..c06d827bddbd69c1acccee90e1956c19a5b00d07 100644 (file)
@@ -38,7 +38,8 @@ SelectionManager::SelectionManager(QAbstractItemView* parent) :
     QObject(parent),
     m_view(parent),
     m_toggle(0),
     QObject(parent),
     m_view(parent),
     m_toggle(0),
-    m_connected(false)
+    m_connected(false),
+    m_appliedPointingHandCursor(false)
 {
     connect(parent, SIGNAL(entered(const QModelIndex&)),
             this, SLOT(slotEntered(const QModelIndex&)));
 {
     connect(parent, SIGNAL(entered(const QModelIndex&)),
             this, SLOT(slotEntered(const QModelIndex&)));
@@ -49,6 +50,7 @@ SelectionManager::SelectionManager(QAbstractItemView* parent) :
     m_toggle->hide();
     connect(m_toggle, SIGNAL(clicked(bool)),
             this, SLOT(setItemSelected(bool)));
     m_toggle->hide();
     connect(m_toggle, SIGNAL(clicked(bool)),
             this, SLOT(setItemSelected(bool)));
+    m_toggle->installEventFilter(this);
 
     m_view->viewport()->installEventFilter(this);
 }
 
     m_view->viewport()->installEventFilter(this);
 }
@@ -59,14 +61,45 @@ SelectionManager::~SelectionManager()
 
 bool SelectionManager::eventFilter(QObject* watched, QEvent* event)
 {
 
 bool SelectionManager::eventFilter(QObject* watched, QEvent* event)
 {
-    Q_ASSERT(watched == m_view->viewport());
-    if (event->type() == QEvent::MouseButtonPress) {
-        // Set the toggle invisible, if a mouse button has been pressed
-        // outside the toggle boundaries. This e.g. assures, that the toggle
-        // gets invisible during dragging items.
-        const QRect toggleBounds(m_toggle->mapToGlobal(QPoint(0, 0)), m_toggle->size());
-        m_toggle->setVisible(toggleBounds.contains(QCursor::pos()));
+    if (watched == m_view->viewport()) {
+        switch (event->type()) {
+        case QEvent::Leave:
+            m_toggle->hide();
+            break;
+
+        case QEvent::MouseButtonPress: {
+            // Set the toggle invisible, if a mouse button has been pressed
+            // outside the toggle boundaries. This e.g. assures, that the toggle
+            // gets invisible during dragging items.
+            const QRect toggleBounds(m_toggle->mapToGlobal(QPoint(0, 0)), m_toggle->size());
+            m_toggle->setVisible(toggleBounds.contains(QCursor::pos()));
+            break;
+        }
+
+        default:
+            break;
+        }
+    } else if (watched == m_toggle) {
+        switch (event->type()) {
+        case QEvent::Hide:
+            // If the toggle button gets hidden, the cursor is not above the item
+            // anymore and the shape must get restored
+            restoreCursor();
+            break;
+
+        case QEvent::Enter:
+            QApplication::changeOverrideCursor(Qt::ArrowCursor);
+            break;
+
+        case QEvent::Leave:
+            QApplication::changeOverrideCursor(Qt::PointingHandCursor);
+            break;
+
+        default:
+            break;
+        }
     }
     }
+
     return QObject::eventFilter(watched, event);
 }
 
     return QObject::eventFilter(watched, event);
 }
 
@@ -82,6 +115,8 @@ void SelectionManager::slotEntered(const QModelIndex& index)
                             (index.column() == DolphinModel::Name) &&
                             (QApplication::mouseButtons() == Qt::NoButton);
     if (showToggle) {
                             (index.column() == DolphinModel::Name) &&
                             (QApplication::mouseButtons() == Qt::NoButton);
     if (showToggle) {
+        applyPointingHandCursor();
+
         m_toggle->setUrl(urlForIndex(index));
 
         if (!m_connected) {
         m_toggle->setUrl(urlForIndex(index));
 
         if (!m_connected) {
@@ -198,4 +233,21 @@ const QModelIndex SelectionManager::indexForUrl(const KUrl& url) const
     return proxyModel->mapFromSource(dirIndex);
 }
 
     return proxyModel->mapFromSource(dirIndex);
 }
 
+
+void SelectionManager::applyPointingHandCursor()
+{
+    if (!m_appliedPointingHandCursor) {
+        QApplication::setOverrideCursor(QCursor(Qt::PointingHandCursor));
+        m_appliedPointingHandCursor = true;
+    }
+}
+
+void SelectionManager::restoreCursor()
+{
+    if (m_appliedPointingHandCursor) {
+        QApplication::restoreOverrideCursor();
+        m_appliedPointingHandCursor = false;
+    }
+}
+
 #include "selectionmanager.moc"
 #include "selectionmanager.moc"