X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/0751d0b0187f113d319c6680ba0110626507d8bc..64afe7b22622f79b34aafd54501b08120ab2fc5c:/src/panels/information/informationpanelcontent.cpp diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp index 39ed1d2bd..b2dd1582e 100644 --- a/src/panels/information/informationpanelcontent.cpp +++ b/src/panels/information/informationpanelcontent.cpp @@ -21,7 +21,6 @@ #include #include -#include #include #include #include @@ -32,6 +31,12 @@ #include #include +#ifndef HAVE_BALOO +#include +#else +#include +#endif + #include #include @@ -59,7 +64,7 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) : QWidget(parent), m_item(), - m_pendingPreview(false), + m_previewJob(0), m_outdatedPreviewTimer(0), m_preview(0), m_phononWidget(0), @@ -100,13 +105,18 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) : QFont font = m_nameLabel->font(); font.setBold(true); m_nameLabel->setFont(font); + m_nameLabel->setTextFormat(Qt::PlainText); m_nameLabel->setAlignment(Qt::AlignHCenter); m_nameLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); const bool previewsShown = InformationPanelSettings::previewsShown(); m_preview->setVisible(previewsShown); +#ifndef HAVE_BALOO m_metaDataWidget = new KFileMetaDataWidget(parent); +#else + m_metaDataWidget = new Baloo::FileMetaDataWidget(parent); +#endif m_metaDataWidget->setFont(KGlobalSettings::smallestReadableFont()); m_metaDataWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); connect(m_metaDataWidget, SIGNAL(urlActivated(KUrl)), this, SIGNAL(urlActivated(KUrl))); @@ -149,10 +159,14 @@ InformationPanelContent::~InformationPanelContent() void InformationPanelContent::showItem(const KFileItem& item) { - m_pendingPreview = false; + // If there is a preview job, kill it to prevent that we have jobs for + // multiple items running, and thus a race condition (bug 250787). + if (m_previewJob) { + m_previewJob->kill(); + } const KUrl itemUrl = item.url(); - const bool isSearchUrl = itemUrl.protocol().contains("search") && item.nepomukUri().isEmpty(); + const bool isSearchUrl = itemUrl.protocol().contains("search") && item.localPath().isEmpty(); if (!applyPlace(itemUrl)) { setNameLabelText(item.text()); if (isSearchUrl) { @@ -165,7 +179,6 @@ void InformationPanelContent::showItem(const KFileItem& item) m_preview->setPixmap(icon); } else { // try to get a preview pixmap from the item... - m_pendingPreview = true; // Mark the currently shown preview as outdated. This is done // with a small delay to prevent a flickering when the next preview @@ -176,16 +189,16 @@ void InformationPanelContent::showItem(const KFileItem& item) m_outdatedPreviewTimer->start(); } - KIO::PreviewJob* job = new KIO::PreviewJob(KFileItemList() << item, QSize(m_preview->width(), m_preview->height())); - job->setScaleType(KIO::PreviewJob::Unscaled); - job->setIgnoreMaximumSize(item.isLocalFile()); - if (job->ui()) { - job->ui()->setWindow(this); + m_previewJob = new KIO::PreviewJob(KFileItemList() << item, QSize(m_preview->width(), m_preview->height())); + m_previewJob->setScaleType(KIO::PreviewJob::Unscaled); + m_previewJob->setIgnoreMaximumSize(item.isLocalFile()); + if (m_previewJob->ui()) { + m_previewJob->ui()->setWindow(this); } - connect(job, SIGNAL(gotPreview(KFileItem,QPixmap)), + connect(m_previewJob, SIGNAL(gotPreview(KFileItem,QPixmap)), this, SLOT(showPreview(KFileItem,QPixmap))); - connect(job, SIGNAL(failed(KFileItem)), + connect(m_previewJob, SIGNAL(failed(KFileItem)), this, SLOT(showIcon(KFileItem))); } } @@ -217,14 +230,18 @@ void InformationPanelContent::showItem(const KFileItem& item) void InformationPanelContent::showItems(const KFileItemList& items) { - m_pendingPreview = false; + // If there is a preview job, kill it to prevent that we have jobs for + // multiple items running, and thus a race condition (bug 250787). + if (m_previewJob) { + m_previewJob->kill(); + } KIconLoader iconLoader; QPixmap icon = iconLoader.loadIcon("dialog-information", KIconLoader::NoGroup, KIconLoader::SizeEnormous); m_preview->setPixmap(icon); - setNameLabelText(i18ncp("@info", "%1 item selected", "%1 items selected", items.count())); + setNameLabelText(i18ncp("@label", "%1 item selected", "%1 items selected", items.count())); if (m_metaDataWidget) { m_metaDataWidget->setItems(items); @@ -305,7 +322,6 @@ void InformationPanelContent::configureSettings(const QList& customCon void InformationPanelContent::showIcon(const KFileItem& item) { m_outdatedPreviewTimer->stop(); - m_pendingPreview = false; if (!applyPlace(item.targetUrl())) { KIcon icon(item.iconName(), KIconLoader::global(), item.overlays()); m_preview->setPixmap(icon.pixmap(KIconLoader::SizeEnormous)); @@ -317,12 +333,10 @@ void InformationPanelContent::showPreview(const KFileItem& item, { m_outdatedPreviewTimer->stop(); Q_UNUSED(item); - if (m_pendingPreview) { - QPixmap p = pixmap; - KIconLoader::global()->drawOverlays(item.overlays(), p, KIconLoader::Desktop); - m_preview->setPixmap(p); - m_pendingPreview = false; - } + + QPixmap p = pixmap; + KIconLoader::global()->drawOverlays(item.overlays(), p, KIconLoader::Desktop); + m_preview->setPixmap(p); } void InformationPanelContent::markOutdatedPreview() @@ -341,7 +355,7 @@ void InformationPanelContent::slotHasVideoChanged(bool hasVideo) void InformationPanelContent::refreshMetaData() { - if (!m_item.isNull() && m_item.nepomukUri().isValid()) { + if (!m_item.isNull()) { showItem(m_item); } }