#include <KIO/JobUiDelegate>
#include <KIO/PreviewJob>
+#include <KConfigGroup>
#include <KJobWidgets>
+#include <KSharedConfig>
#include <KToolTipWidget>
#include <KIconLoader>
#include <QApplication>
-#include <QDesktopWidget>
#include <QIcon>
#include <QLayout>
#include <QStyle>
m_showToolTipTimer(nullptr),
m_contentRetrievalTimer(nullptr),
m_transientParent(nullptr),
- m_fileMetaDataWidget(nullptr),
m_toolTipRequested(false),
m_metaDataRequested(false),
m_appliedWaitCursor(false),
ToolTipManager::~ToolTipManager()
{
+ if (!m_fileMetaDatWidgetOwnershipTransferred) {
+ delete m_fileMetaDataWidget;
+ }
}
void ToolTipManager::showToolTip(const KFileItem& item, const QRectF& itemRect, QWindow *transientParent)
{
- hideToolTip();
+ hideToolTip(HideBehavior::Instantly);
m_itemRect = itemRect.toRect();
// 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.
- m_fileMetaDataWidget.reset(new DolphinFileMetaDataWidget());
- connect(m_fileMetaDataWidget.data(), &DolphinFileMetaDataWidget::metaDataRequestFinished,
- this, &ToolTipManager::slotMetaDataRequestFinished);
- connect(m_fileMetaDataWidget.data(), &DolphinFileMetaDataWidget::urlActivated,
- this, &ToolTipManager::urlActivated);
+ if (!m_fileMetaDataWidget) {
+ m_fileMetaDataWidget = new DolphinFileMetaDataWidget();
+ connect(m_fileMetaDataWidget, &DolphinFileMetaDataWidget::metaDataRequestFinished, this, &ToolTipManager::slotMetaDataRequestFinished);
+ connect(m_fileMetaDataWidget, &DolphinFileMetaDataWidget::urlActivated, this, &ToolTipManager::urlActivated);
+ }
m_contentRetrievalTimer->start();
m_showToolTipTimer->start();
// Request a preview of the item
m_fileMetaDataWidget->setPreview(QPixmap());
- QStringList plugins = KIO::PreviewJob::availablePlugins();
+ const KConfigGroup globalConfig(KSharedConfig::openConfig(), "PreviewSettings");
+ const QStringList plugins = globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins());
KIO::PreviewJob* job = new KIO::PreviewJob(KFileItemList() << m_item,
QSize(256, 256),
&plugins);
- job->setIgnoreMaximumSize(m_item.isLocalFile());
+ job->setIgnoreMaximumSize(m_item.isLocalFile() && !m_item.isSlow());
if (job->uiDelegate()) {
KJobWidgets::setWindow(job, qApp->activeWindow());
}
if (!m_tooltipWidget) {
m_tooltipWidget.reset(new KToolTipWidget());
}
- m_tooltipWidget->showBelow(m_itemRect, m_fileMetaDataWidget.data(), m_transientParent);
+ m_tooltipWidget->showBelow(m_itemRect, m_fileMetaDataWidget, m_transientParent);
+ // At this point KToolTipWidget adopted our parent-less metadata widget.
+ m_fileMetaDatWidgetOwnershipTransferred = true;
+
m_toolTipRequested = false;
}