X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/9ef4b489c043a1bdfdb2931959f58e366862fe35..87ddbf770e1202e2b869e89f5ce609a0e856bdec:/src/views/tooltips/tooltipmanager.cpp diff --git a/src/views/tooltips/tooltipmanager.cpp b/src/views/tooltips/tooltipmanager.cpp index 3c262b749..0636df795 100644 --- a/src/views/tooltips/tooltipmanager.cpp +++ b/src/views/tooltips/tooltipmanager.cpp @@ -20,14 +20,14 @@ #include "tooltipmanager.h" #include "filemetadatatooltip.h" -#include +#include +#include #include +#include #include #include #include -#include -#include #include #include @@ -44,18 +44,18 @@ ToolTipManager::ToolTipManager(QWidget* parent) : m_itemRect() { if (parent) { - m_margin = qMax(m_margin, parent->style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth)); + m_margin = qMax(m_margin, parent->style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth)); } - + m_showToolTipTimer = new QTimer(this); m_showToolTipTimer->setSingleShot(true); m_showToolTipTimer->setInterval(500); - connect(m_showToolTipTimer, SIGNAL(timeout()), this, SLOT(showToolTip())); + connect(m_showToolTipTimer, &QTimer::timeout, this, static_cast(&ToolTipManager::showToolTip)); m_contentRetrievalTimer = new QTimer(this); m_contentRetrievalTimer->setSingleShot(true); m_contentRetrievalTimer->setInterval(200); - connect(m_contentRetrievalTimer, SIGNAL(timeout()), this, SLOT(startContentRetrieval())); + connect(m_contentRetrievalTimer, &QTimer::timeout, this, &ToolTipManager::startContentRetrieval); Q_ASSERT(m_contentRetrievalTimer->interval() < m_showToolTipTimer->interval()); } @@ -80,8 +80,8 @@ void ToolTipManager::showToolTip(const KFileItem& item, const QRectF& itemRect) // meta data retrieval, when passing rapidly over a lot of items. Q_ASSERT(!m_fileMetaDataToolTip); m_fileMetaDataToolTip = new FileMetaDataToolTip(); - connect(m_fileMetaDataToolTip, SIGNAL(metaDataRequestFinished(KFileItemList)), - this, SLOT(slotMetaDataRequestFinished())); + connect(m_fileMetaDataToolTip, &FileMetaDataToolTip::metaDataRequestFinished, + this, &ToolTipManager::slotMetaDataRequestFinished); m_contentRetrievalTimer->start(); m_showToolTipTimer->start(); @@ -103,7 +103,9 @@ void ToolTipManager::hideToolTip() if (m_fileMetaDataToolTip) { m_fileMetaDataToolTip->hide(); - delete m_fileMetaDataToolTip; + // Do not delete the tool tip immediately to prevent crashes when + // QCoreApplication tries to deliver an 'Enter' event to it, see bug 310579. + m_fileMetaDataToolTip->deleteLater(); m_fileMetaDataToolTip = 0; } } @@ -126,12 +128,16 @@ void ToolTipManager::startContentRetrieval() // Request a preview of the item m_fileMetaDataToolTip->setPreview(QPixmap()); - KIO::PreviewJob* job = KIO::filePreview(KFileItemList() << m_item, QSize(256, 256)); + KIO::PreviewJob* job = new KIO::PreviewJob(KFileItemList() << m_item, QSize(256, 256)); + job->setIgnoreMaximumSize(m_item.isLocalFile()); + if (job->ui()) { + KJobWidgets::setWindow(job, qApp->activeWindow()); + } - connect(job, SIGNAL(gotPreview(KFileItem,QPixmap)), - this, SLOT(setPreviewPix(KFileItem,QPixmap))); - connect(job, SIGNAL(failed(KFileItem)), - this, SLOT(previewFailed())); + connect(job, &KIO::PreviewJob::gotPreview, + this, &ToolTipManager::setPreviewPix); + connect(job, &KIO::PreviewJob::failed, + this, &ToolTipManager::previewFailed); } @@ -159,7 +165,7 @@ void ToolTipManager::previewFailed() return; } - const QPixmap pixmap = KIcon(m_item.iconName()).pixmap(128, 128); + const QPixmap pixmap = QIcon::fromTheme(m_item.iconName()).pixmap(128, 128); m_fileMetaDataToolTip->setPreview(pixmap); if (!m_showToolTipTimer->isActive()) { showToolTip(); @@ -259,4 +265,3 @@ void ToolTipManager::showToolTip() m_toolTipRequested = false; } -#include "tooltipmanager.moc"