mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-28 03:21:56 +00:00
[InformationPanel] Hide the video when the preview is disabled, avoid computing the preview when it is disabled
Summary: Bug symptom : {F6698879} Fix the bugs and allow to avoid launching a PreviewJob with all files even when the preview is disabled. Test Plan: # In dolphin with an information panel with preview on # launch the video preview # Disable the preview ->bug 1: the video player control is still visible (this bug fix this) # re-enable preview -> bug 2: the video stays visible and the preview is displayed above (this bug fix this) Reviewers: #dolphin, elvisangelaccio, ngraham Reviewed By: #dolphin, elvisangelaccio, ngraham Subscribers: ngraham, kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D19844
This commit is contained in:
parent
aee1b07e26
commit
405aa4878f
|
@ -199,8 +199,8 @@ void InformationPanel::showContextMenu(const QPoint &pos) {
|
|||
|
||||
const bool isChecked = action->isChecked();
|
||||
if (action == previewAction) {
|
||||
m_content->setPreviewVisible(isChecked);
|
||||
InformationPanelSettings::setPreviewsShown(isChecked);
|
||||
m_content->refreshPreview();
|
||||
} else if (action == configureAction) {
|
||||
FileMetaDataConfigurationDialog* dialog = new FileMetaDataConfigurationDialog(this);
|
||||
dialog->setDescription(i18nc("@label::textbox",
|
||||
|
|
|
@ -141,73 +141,80 @@ InformationPanelContent::~InformationPanelContent()
|
|||
|
||||
void InformationPanelContent::showItem(const KFileItem& item)
|
||||
{
|
||||
m_item = item;
|
||||
|
||||
refreshPreview();
|
||||
refreshMetaData();
|
||||
}
|
||||
|
||||
void InformationPanelContent::refreshPreview() {
|
||||
// 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 QUrl itemUrl = item.url();
|
||||
const bool isSearchUrl = itemUrl.scheme().contains(QStringLiteral("search")) && item.localPath().isEmpty();
|
||||
setNameLabelText(item.text());
|
||||
if (isSearchUrl) {
|
||||
// in the case of a search-URL the URL is not readable for humans
|
||||
// (at least not useful to show in the Information Panel)
|
||||
m_preview->setPixmap(
|
||||
QIcon::fromTheme(QStringLiteral("nepomuk")).pixmap(KIconLoader::SizeEnormous, KIconLoader::SizeEnormous)
|
||||
);
|
||||
if (InformationPanelSettings::previewsShown()) {
|
||||
m_preview->show();
|
||||
|
||||
const QUrl itemUrl = m_item.url();
|
||||
const bool isSearchUrl = itemUrl.scheme().contains(QStringLiteral("search")) && m_item.localPath().isEmpty();
|
||||
setNameLabelText(m_item.text());
|
||||
if (isSearchUrl) {
|
||||
// in the case of a search-URL the URL is not readable for humans
|
||||
// (at least not useful to show in the Information Panel)
|
||||
m_preview->setPixmap(
|
||||
QIcon::fromTheme(QStringLiteral("nepomuk")).pixmap(KIconLoader::SizeEnormous, KIconLoader::SizeEnormous)
|
||||
);
|
||||
} else {
|
||||
// try to get a preview pixmap from the item...
|
||||
|
||||
// Mark the currently shown preview as outdated. This is done
|
||||
// with a small delay to prevent a flickering when the next preview
|
||||
// can be shown within a short timeframe. This timer is not started
|
||||
// for directories, as directory previews might fail and return the
|
||||
// same icon.
|
||||
if (!m_item.isDir()) {
|
||||
m_outdatedPreviewTimer->start();
|
||||
}
|
||||
|
||||
QStringList plugins = KIO::PreviewJob::availablePlugins();
|
||||
m_previewJob = new KIO::PreviewJob(KFileItemList() << m_item,
|
||||
QSize(m_preview->width(), m_preview->height()),
|
||||
&plugins);
|
||||
m_previewJob->setScaleType(KIO::PreviewJob::Unscaled);
|
||||
m_previewJob->setIgnoreMaximumSize(m_item.isLocalFile());
|
||||
if (m_previewJob->uiDelegate()) {
|
||||
KJobWidgets::setWindow(m_previewJob, this);
|
||||
}
|
||||
|
||||
connect(m_previewJob.data(), &KIO::PreviewJob::gotPreview,
|
||||
this, &InformationPanelContent::showPreview);
|
||||
connect(m_previewJob.data(), &KIO::PreviewJob::failed,
|
||||
this, &InformationPanelContent::showIcon);
|
||||
|
||||
const QString mimeType = m_item.mimetype();
|
||||
const bool usePhonon = mimeType.startsWith(QLatin1String("audio/")) || mimeType.startsWith(QLatin1String("video/"));
|
||||
if (usePhonon) {
|
||||
m_phononWidget->show();
|
||||
m_phononWidget->setUrl(m_item.targetUrl());
|
||||
m_phononWidget->setVideoSize(m_preview->size());
|
||||
} else {
|
||||
m_phononWidget->hide();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// try to get a preview pixmap from the item...
|
||||
|
||||
// Mark the currently shown preview as outdated. This is done
|
||||
// with a small delay to prevent a flickering when the next preview
|
||||
// can be shown within a short timeframe. This timer is not started
|
||||
// for directories, as directory previews might fail and return the
|
||||
// same icon.
|
||||
if (!item.isDir()) {
|
||||
m_outdatedPreviewTimer->start();
|
||||
}
|
||||
|
||||
QStringList plugins = KIO::PreviewJob::availablePlugins();
|
||||
m_previewJob = new KIO::PreviewJob(KFileItemList() << item,
|
||||
QSize(m_preview->width(), m_preview->height()),
|
||||
&plugins);
|
||||
m_previewJob->setScaleType(KIO::PreviewJob::Unscaled);
|
||||
m_previewJob->setIgnoreMaximumSize(item.isLocalFile());
|
||||
if (m_previewJob->uiDelegate()) {
|
||||
KJobWidgets::setWindow(m_previewJob, this);
|
||||
}
|
||||
|
||||
connect(m_previewJob.data(), &KIO::PreviewJob::gotPreview,
|
||||
this, &InformationPanelContent::showPreview);
|
||||
connect(m_previewJob.data(), &KIO::PreviewJob::failed,
|
||||
this, &InformationPanelContent::showIcon);
|
||||
m_preview->hide();
|
||||
m_phononWidget->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void InformationPanelContent::refreshMetaData() {
|
||||
if (m_metaDataWidget) {
|
||||
m_metaDataWidget->setDateFormat(static_cast<Baloo::DateFormats>(InformationPanelSettings::dateFormat()));
|
||||
m_metaDataWidget->show();
|
||||
m_metaDataWidget->setItems(KFileItemList() << item);
|
||||
m_metaDataWidget->setItems(KFileItemList() << m_item);
|
||||
}
|
||||
|
||||
if (InformationPanelSettings::previewsShown()) {
|
||||
const QString mimeType = item.mimetype();
|
||||
const bool usePhonon = mimeType.startsWith(QLatin1String("audio/")) || mimeType.startsWith(QLatin1String("video/"));
|
||||
if (usePhonon) {
|
||||
m_phononWidget->show();
|
||||
m_phononWidget->setUrl(item.targetUrl());
|
||||
if (m_preview->isVisible()) {
|
||||
m_phononWidget->setVideoSize(m_preview->size());
|
||||
}
|
||||
} else {
|
||||
m_phononWidget->hide();
|
||||
m_preview->setVisible(true);
|
||||
}
|
||||
} else {
|
||||
m_phononWidget->hide();
|
||||
}
|
||||
|
||||
m_item = item;
|
||||
}
|
||||
|
||||
void InformationPanelContent::showItems(const KFileItemList& items)
|
||||
|
@ -290,10 +297,6 @@ void InformationPanelContent::markOutdatedPreview()
|
|||
m_preview->setPixmap(disabledPixmap);
|
||||
}
|
||||
|
||||
void InformationPanelContent::setPreviewVisible(bool visible) {
|
||||
m_preview->setVisible(visible);
|
||||
}
|
||||
|
||||
KFileItemList InformationPanelContent::items() {
|
||||
return m_metaDataWidget->items();
|
||||
}
|
||||
|
@ -303,13 +306,6 @@ void InformationPanelContent::slotHasVideoChanged(bool hasVideo)
|
|||
m_preview->setVisible(InformationPanelSettings::previewsShown() && !hasVideo);
|
||||
}
|
||||
|
||||
void InformationPanelContent::refreshMetaData()
|
||||
{
|
||||
if (!m_item.isNull()) {
|
||||
showItem(m_item);
|
||||
}
|
||||
}
|
||||
|
||||
void InformationPanelContent::setNameLabelText(const QString& text)
|
||||
{
|
||||
QTextOption textOption;
|
||||
|
|
|
@ -68,21 +68,24 @@ public:
|
|||
void showItem(const KFileItem& item);
|
||||
|
||||
/**
|
||||
* Shows the meta information for the items \p items.
|
||||
* Shows the meta information for the items \p items and its preview
|
||||
*/
|
||||
void showItems(const KFileItemList& items);
|
||||
|
||||
void setPreviewVisible(bool visible);
|
||||
|
||||
KFileItemList items();
|
||||
|
||||
/**
|
||||
* Refreshes the preview display, hiding it if needed
|
||||
*/
|
||||
void refreshPreview();
|
||||
|
||||
signals:
|
||||
void urlActivated( const QUrl& url );
|
||||
|
||||
public slots:
|
||||
/**
|
||||
* Is invoked after the file meta data configuration dialog has been
|
||||
* closed and refreshes the visibility of the meta data.
|
||||
* closed and refreshes the displayed meta data by the panel.
|
||||
*/
|
||||
void refreshMetaData();
|
||||
|
||||
|
|
Loading…
Reference in a new issue