#include "dolphinfilemetadatawidget.h"
-#include <KIO/JobUiDelegate>
-#include <KIO/PreviewJob>
#include <KConfigGroup>
+#include <KIO/PreviewJob>
+#include <KIconLoader>
#include <KJobWidgets>
#include <KSharedConfig>
#include <KToolTipWidget>
-#include <KIconLoader>
#include <QApplication>
-#include <QDesktopWidget>
-#include <QIcon>
-#include <QLayout>
#include <QStyle>
#include <QTimer>
#include <QWindow>
-class IconLoaderSingleton {
+class IconLoaderSingleton
+{
public:
IconLoaderSingleton() = default;
Q_GLOBAL_STATIC(IconLoaderSingleton, iconLoader)
-ToolTipManager::ToolTipManager(QWidget* parent) :
- QObject(parent),
- m_showToolTipTimer(nullptr),
- m_contentRetrievalTimer(nullptr),
- m_transientParent(nullptr),
- m_fileMetaDataWidget(nullptr),
- m_toolTipRequested(false),
- m_metaDataRequested(false),
- m_appliedWaitCursor(false),
- m_margin(4),
- m_item(),
- m_itemRect()
+ToolTipManager::ToolTipManager(QWidget *parent)
+ : QObject(parent)
+ , m_showToolTipTimer(nullptr)
+ , m_contentRetrievalTimer(nullptr)
+ , m_transientParent(nullptr)
+ , m_toolTipRequested(false)
+ , m_metaDataRequested(false)
+ , m_appliedWaitCursor(false)
+ , m_margin(4)
+ , m_item()
+ , m_itemRect()
{
if (parent) {
m_margin = qMax(m_margin, parent->style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth));
ToolTipManager::~ToolTipManager()
{
+ if (!m_fileMetaDatWidgetOwnershipTransferred) {
+ delete m_fileMetaDataWidget;
+ }
}
-void ToolTipManager::showToolTip(const KFileItem& item, const QRectF& itemRect, QWindow *transientParent)
+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());
- const KConfigGroup globalConfig(KSharedConfig::openConfig(), "PreviewSettings");
+ const KConfigGroup globalConfig(KSharedConfig::openConfig(), QLatin1String("PreviewSettings"));
const QStringList plugins = globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins());
- KIO::PreviewJob* job = new KIO::PreviewJob(KFileItemList() << m_item,
- QSize(256, 256),
- &plugins);
+ KIO::PreviewJob *job = new KIO::PreviewJob(KFileItemList() << m_item, QSize(512, 512), &plugins);
+ job->setDevicePixelRatio(m_fileMetaDataWidget->devicePixelRatioF());
job->setIgnoreMaximumSize(m_item.isLocalFile() && !m_item.isSlow());
if (job->uiDelegate()) {
KJobWidgets::setWindow(job, qApp->activeWindow());
}
- connect(job, &KIO::PreviewJob::gotPreview,
- this, &ToolTipManager::setPreviewPix);
- connect(job, &KIO::PreviewJob::failed,
- this, &ToolTipManager::previewFailed);
+ connect(job, &KIO::PreviewJob::gotPreview, this, &ToolTipManager::setPreviewPix);
+ connect(job, &KIO::PreviewJob::failed, this, &ToolTipManager::previewFailed);
}
-
-void ToolTipManager::setPreviewPix(const KFileItem& item,
- const QPixmap& pixmap)
+void ToolTipManager::setPreviewPix(const KFileItem &item, const QPixmap &pixmap)
{
if (!m_toolTipRequested || (m_item.url() != item.url())) {
// No tooltip is requested anymore or an old preview has been received
return;
}
QPalette pal;
- for (auto state : { QPalette::Active, QPalette::Inactive, QPalette::Disabled }) {
+ for (auto state : {QPalette::Active, QPalette::Inactive, QPalette::Disabled}) {
pal.setBrush(state, QPalette::WindowText, pal.toolTipText());
pal.setBrush(state, QPalette::Window, pal.toolTipBase());
}
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;
}
+#include "moc_tooltipmanager.cpp"