]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/tooltips/tooltipmanager.cpp
Details view: Fix jumping column-widths
[dolphin.git] / src / views / tooltips / tooltipmanager.cpp
index a2b717b91dd476874c761c6dcbc81793d8045c0d..f93dd90bed2d158e2c62c0727cf964fd880effb0 100644 (file)
@@ -22,6 +22,7 @@
 #include "filemetadatatooltip.h"
 #include <KIcon>
 #include <KIO/PreviewJob>
+#include <KSharedConfig>
 
 #include <QApplication>
 #include <QDesktopWidget>
@@ -43,20 +44,10 @@ ToolTipManager::ToolTipManager(QAbstractItemView* parent,
     m_fileMetaDataToolTip(0),
     m_toolTipRequested(false),
     m_metaDataRequested(false),
+    m_appliedWaitCursor(false),
     m_item(),
     m_itemRect()
 {
-    static FileMetaDataToolTip* sharedToolTip = 0;
-    if (sharedToolTip == 0) {
-        sharedToolTip = new FileMetaDataToolTip();
-        // TODO: Using K_GLOBAL_STATIC would be preferable to maintain the
-        // instance, but the cleanup of KFileMetaDataWidget at this stage does
-        // not work.
-    }
-    m_fileMetaDataToolTip = sharedToolTip;
-    connect(m_fileMetaDataToolTip, SIGNAL(metaDataRequestFinished(KFileItemList)),
-            this, SLOT(slotMetaDataRequestFinished()));
-
     m_dolphinModel = static_cast<DolphinModel*>(m_proxyModel->sourceModel());
     connect(parent, SIGNAL(entered(const QModelIndex&)),
             this, SLOT(requestToolTip(const QModelIndex&)));
@@ -84,6 +75,7 @@ ToolTipManager::ToolTipManager(QAbstractItemView* parent,
     connect(parent->verticalScrollBar(), SIGNAL(valueChanged(int)),
             this, SLOT(hideToolTip()));
 
+    Q_ASSERT(m_view);
     m_view->viewport()->installEventFilter(this);
     m_view->installEventFilter(this);
 }
@@ -94,16 +86,19 @@ ToolTipManager::~ToolTipManager()
 
 void ToolTipManager::hideToolTip()
 {
-    QApplication::restoreOverrideCursor();
+    if (m_appliedWaitCursor) {
+        QApplication::restoreOverrideCursor();
+        m_appliedWaitCursor = false;
+    }
 
     m_toolTipRequested = false;
     m_metaDataRequested = false;
     m_showToolTipTimer->stop();
     m_contentRetrievalTimer->stop();
 
-    m_fileMetaDataToolTip->setItems(KFileItemList());
-    m_fileMetaDataToolTip->hide();
-}
+    delete m_fileMetaDataToolTip;
+    m_fileMetaDataToolTip = 0;}
+
 
 bool ToolTipManager::eventFilter(QObject* watched, QEvent* event)
 {
@@ -140,6 +135,11 @@ void ToolTipManager::requestToolTip(const QModelIndex& index)
         // Only start the retrieving of the content, when the mouse has been over this
         // item for 200 milliseconds. This prevents a lot of useless preview jobs and
         // meta data retrieval, when passing rapidly over a lot of items.
+        Q_ASSERT(!m_fileMetaDataToolTip);
+        m_fileMetaDataToolTip = new FileMetaDataToolTip(m_view);
+        connect(m_fileMetaDataToolTip, SIGNAL(metaDataRequestFinished(KFileItemList)),
+                this, SLOT(slotMetaDataRequestFinished()));
+
         m_contentRetrievalTimer->start();
         m_showToolTipTimer->start();
         m_toolTipRequested = true;
@@ -164,7 +164,7 @@ void ToolTipManager::startContentRetrieval()
     // Request a preview of the item
     m_fileMetaDataToolTip->setPreview(QPixmap());
 
-    KIO::PreviewJob* job = KIO::filePreview(KFileItemList() << m_item, 256, 256);
+    KIO::PreviewJob* job = KIO::filePreview(KFileItemList() << m_item, QSize(256, 256));
 
     connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)),
             this, SLOT(setPreviewPix(const KFileItem&, const QPixmap&)));
@@ -219,14 +219,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;
     }