From e2b844437e9308a04ddf043ae9d2f5c8ffef97b0 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Wed, 6 Oct 2010 13:58:47 +0000 Subject: [PATCH] Use a pointing-hand cursor when hovering items as discussed on http://lists.kde.org/?l=kde-core-devel&m=126027946921686&w=1 svn path=/trunk/KDE/kdebase/apps/; revision=1183195 --- src/views/selectiontoggle.cpp | 13 +++++++++ src/views/selectiontoggle.h | 1 + src/views/tooltips/tooltipmanager.cpp | 13 +++++++-- src/views/tooltips/tooltipmanager.h | 1 + src/views/viewextensionsfactory.cpp | 38 +++++++++++++++++++++++++-- src/views/viewextensionsfactory.h | 3 +++ 6 files changed, 65 insertions(+), 4 deletions(-) diff --git a/src/views/selectiontoggle.cpp b/src/views/selectiontoggle.cpp index f5287a3dd..3ab40ebdc 100644 --- a/src/views/selectiontoggle.cpp +++ b/src/views/selectiontoggle.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -35,6 +36,7 @@ SelectionToggle::SelectionToggle(QWidget* parent) : QAbstractButton(parent), m_isHovered(false), m_leftMouseButtonPressed(false), + m_appliedArrowCursor(false), m_fadingValue(0), m_margin(0), m_icon(), @@ -132,6 +134,11 @@ void SelectionToggle::enterEvent(QEvent* event) { QAbstractButton::enterEvent(event); + if (!m_appliedArrowCursor) { + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + m_appliedArrowCursor = true; + } + // if the mouse cursor is above the selection toggle, display // it immediately without fading timer m_isHovered = true; @@ -147,6 +154,12 @@ void SelectionToggle::enterEvent(QEvent* event) void SelectionToggle::leaveEvent(QEvent* event) { QAbstractButton::leaveEvent(event); + + if (m_appliedArrowCursor) { + QApplication::restoreOverrideCursor(); + m_appliedArrowCursor = false; + } + m_isHovered = false; update(); } diff --git a/src/views/selectiontoggle.h b/src/views/selectiontoggle.h index 210f1a3aa..79833a522 100644 --- a/src/views/selectiontoggle.h +++ b/src/views/selectiontoggle.h @@ -89,6 +89,7 @@ private: private: bool m_isHovered; bool m_leftMouseButtonPressed; + bool m_appliedArrowCursor; int m_fadingValue; int m_margin; QPixmap m_icon; diff --git a/src/views/tooltips/tooltipmanager.cpp b/src/views/tooltips/tooltipmanager.cpp index a2b717b91..09e97861a 100644 --- a/src/views/tooltips/tooltipmanager.cpp +++ b/src/views/tooltips/tooltipmanager.cpp @@ -43,6 +43,7 @@ ToolTipManager::ToolTipManager(QAbstractItemView* parent, m_fileMetaDataToolTip(0), m_toolTipRequested(false), m_metaDataRequested(false), + m_appliedWaitCursor(false), m_item(), m_itemRect() { @@ -94,7 +95,10 @@ ToolTipManager::~ToolTipManager() void ToolTipManager::hideToolTip() { - QApplication::restoreOverrideCursor(); + if (m_appliedWaitCursor) { + QApplication::restoreOverrideCursor(); + m_appliedWaitCursor = false; + } m_toolTipRequested = false; m_metaDataRequested = false; @@ -219,14 +223,19 @@ void ToolTipManager::slotMetaDataRequestFinished() void ToolTipManager::showToolTip() { Q_ASSERT(m_toolTipRequested); - QApplication::restoreOverrideCursor(); + if (m_appliedWaitCursor) { + QApplication::restoreOverrideCursor(); + m_appliedWaitCursor = false; + } if (QApplication::mouseButtons() & Qt::LeftButton) { return; } if (m_fileMetaDataToolTip->preview().isNull() || m_metaDataRequested) { + Q_ASSERT(!m_appliedWaitCursor); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + m_appliedWaitCursor = true; return; } diff --git a/src/views/tooltips/tooltipmanager.h b/src/views/tooltips/tooltipmanager.h index dffd18868..f8bcd3dfd 100644 --- a/src/views/tooltips/tooltipmanager.h +++ b/src/views/tooltips/tooltipmanager.h @@ -84,6 +84,7 @@ private: bool m_toolTipRequested; bool m_metaDataRequested; + bool m_appliedWaitCursor; KFileItem m_item; QRect m_itemRect; }; diff --git a/src/views/viewextensionsfactory.cpp b/src/views/viewextensionsfactory.cpp index 0ddb9d0a4..6d4ab09ca 100644 --- a/src/views/viewextensionsfactory.cpp +++ b/src/views/viewextensionsfactory.cpp @@ -37,11 +37,13 @@ #include #include #include +#include ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view, DolphinViewController* dolphinViewController, const ViewModeController* viewModeController) : QObject(view), + m_appliedPointingHandCursor(false), m_view(view), m_dolphinViewController(dolphinViewController), m_toolTipManager(0), @@ -127,6 +129,10 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view, this, SLOT(slotNameFilterChanged(const QString&))); view->viewport()->installEventFilter(this); + + // Apply a pointing-hand cursor when hovering files + connect(view, SIGNAL(entered(const QModelIndex&)), SLOT(applyPointingHandCursor())); + connect(view, SIGNAL(viewportEntered()), SLOT(restoreCursor())); } ViewExtensionsFactory::~ViewExtensionsFactory() @@ -156,9 +162,21 @@ bool ViewExtensionsFactory::autoFolderExpandingEnabled() const bool ViewExtensionsFactory::eventFilter(QObject* watched, QEvent* event) { Q_UNUSED(watched); - if ((event->type() == QEvent::Wheel) && (m_selectionManager != 0)) { - m_selectionManager->reset(); + + switch (event->type()) { + case QEvent::Wheel: + if (m_selectionManager != 0) { + m_selectionManager->reset(); + } + break; + + case QEvent::Leave: + restoreCursor(); + break; + + default: break; } + return false; } @@ -235,6 +253,22 @@ void ViewExtensionsFactory::requestActivation() m_dolphinViewController->requestActivation(); } +void ViewExtensionsFactory::applyPointingHandCursor() +{ + if (!m_appliedPointingHandCursor && !(QApplication::mouseButtons() & Qt::LeftButton)) { + QApplication::setOverrideCursor(QCursor(Qt::PointingHandCursor)); + m_appliedPointingHandCursor = true; + } +} + +void ViewExtensionsFactory::restoreCursor() +{ + if (m_appliedPointingHandCursor) { + QApplication::restoreOverrideCursor(); + m_appliedPointingHandCursor = false; + } +} + DolphinSortFilterProxyModel* ViewExtensionsFactory::proxyModel() const { return static_cast(m_view->model()); diff --git a/src/views/viewextensionsfactory.h b/src/views/viewextensionsfactory.h index 9324932ac..0ab3d06d0 100644 --- a/src/views/viewextensionsfactory.h +++ b/src/views/viewextensionsfactory.h @@ -85,11 +85,14 @@ private slots: void slotNameFilterChanged(const QString& nameFilter); void slotRequestVersionControlActions(const KFileItemList& items); void requestActivation(); + void applyPointingHandCursor(); + void restoreCursor(); private: DolphinSortFilterProxyModel* proxyModel() const; private: + bool m_appliedPointingHandCursor; QAbstractItemView* m_view; DolphinViewController* m_dolphinViewController; ToolTipManager* m_toolTipManager; -- 2.47.3