X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/abefc8663ac5c9dc15ad08408e224b3a3cef3b6f..39f89141b06c:/src/views/selectionmanager.cpp diff --git a/src/views/selectionmanager.cpp b/src/views/selectionmanager.cpp index 7353e5a39..c06d827bd 100644 --- a/src/views/selectionmanager.cpp +++ b/src/views/selectionmanager.cpp @@ -38,7 +38,8 @@ SelectionManager::SelectionManager(QAbstractItemView* parent) : 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&))); @@ -49,6 +50,7 @@ SelectionManager::SelectionManager(QAbstractItemView* parent) : m_toggle->hide(); connect(m_toggle, SIGNAL(clicked(bool)), this, SLOT(setItemSelected(bool))); + m_toggle->installEventFilter(this); m_view->viewport()->installEventFilter(this); } @@ -59,14 +61,45 @@ SelectionManager::~SelectionManager() 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); } @@ -82,6 +115,8 @@ void SelectionManager::slotEntered(const QModelIndex& index) (index.column() == DolphinModel::Name) && (QApplication::mouseButtons() == Qt::NoButton); if (showToggle) { + applyPointingHandCursor(); + m_toggle->setUrl(urlForIndex(index)); if (!m_connected) { @@ -198,4 +233,21 @@ const QModelIndex SelectionManager::indexForUrl(const KUrl& url) const 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"