]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Use a pointing-hand cursor when hovering items as discussed on http://lists.kde.org...
authorPeter Penz <peter.penz19@gmail.com>
Wed, 6 Oct 2010 13:58:47 +0000 (13:58 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Wed, 6 Oct 2010 13:58:47 +0000 (13:58 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=1183195

src/views/selectiontoggle.cpp
src/views/selectiontoggle.h
src/views/tooltips/tooltipmanager.cpp
src/views/tooltips/tooltipmanager.h
src/views/viewextensionsfactory.cpp
src/views/viewextensionsfactory.h

index f5287a3dd7a2c05637f5669de31d61865696d7cc..3ab40ebdcebda2e868c4b70665efd289ebb12743 100644 (file)
@@ -25,6 +25,7 @@
 #include <kiconeffect.h>
 #include <klocale.h>
 
+#include <QApplication>
 #include <QPainter>
 #include <QPaintEvent>
 #include <QRect>
@@ -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();
 }
index 210f1a3aa5b4e6b2c0bf61a56e2a89b28a1938cb..79833a522775406cddccccaf4f3f0ccd3054247f 100644 (file)
@@ -89,6 +89,7 @@ private:
 private:
     bool m_isHovered;
     bool m_leftMouseButtonPressed;
+    bool m_appliedArrowCursor;
     int m_fadingValue;
     int m_margin;
     QPixmap m_icon;
index a2b717b91dd476874c761c6dcbc81793d8045c0d..09e97861a4c6fd7f179dc95133401f386910d1f5 100644 (file)
@@ -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;
     }
 
index dffd188682d90370ec321fd6573ba5f7c4a12b0d..f8bcd3dfdb256e8ac4a7126e7b192d03c98426a9 100644 (file)
@@ -84,6 +84,7 @@ private:
 
     bool m_toolTipRequested;
     bool m_metaDataRequested;
+    bool m_appliedWaitCursor;
     KFileItem m_item;
     QRect m_itemRect;
 };
index 0ddb9d0a45769543086492b7f7c928a9a9efdb5d..6d4ab09caef9d13b1651288d09facc1fb68f3ffc 100644 (file)
 #include <kdirmodel.h>
 #include <kfilepreviewgenerator.h>
 #include <QAbstractItemView>
+#include <QApplication>
 
 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<DolphinSortFilterProxyModel*>(m_view->model());
index 9324932ac684f6e8a08bd311be2e21d89f5400d7..0ab3d06d0be09d4971f1fb24d8e466e10279aa69 100644 (file)
@@ -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;