diff options
| author | Peter Penz <[email protected]> | 2010-10-08 19:10:53 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2010-10-08 19:10:53 +0000 |
| commit | f955ee200da38d80be4833d8b421221874896ca1 (patch) | |
| tree | 28cb1fa19131e59b864be7ef1d92a529cf1ce1ac /src/views/selectionmanager.cpp | |
| parent | fff40080bcc4719526cde17f826810d1b193ad52 (diff) | |
Move the changing of the cursor-shape from the extensions-factory and the selection-toggle to the selection-manager. Beside simplifying the code this also solves some corner-cases where the shape has not been restored correctly.
svn path=/trunk/KDE/kdebase/apps/; revision=1183934
Diffstat (limited to 'src/views/selectionmanager.cpp')
| -rw-r--r-- | src/views/selectionmanager.cpp | 68 |
1 files changed, 60 insertions, 8 deletions
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" |
