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
3fe6547197
commit
35f1fd5c15
|
@ -198,8 +198,8 @@ void InformationPanel::showContextMenu(const QPoint &pos) {
|
||||||
|
|
||||||
const bool isChecked = action->isChecked();
|
const bool isChecked = action->isChecked();
|
||||||
if (action == previewAction) {
|
if (action == previewAction) {
|
||||||
m_content->setPreviewVisible(isChecked);
|
|
||||||
InformationPanelSettings::setPreviewsShown(isChecked);
|
InformationPanelSettings::setPreviewsShown(isChecked);
|
||||||
|
m_content->refreshPreview();
|
||||||
} else if (action == configureAction) {
|
} else if (action == configureAction) {
|
||||||
FileMetaDataConfigurationDialog* dialog = new FileMetaDataConfigurationDialog(this);
|
FileMetaDataConfigurationDialog* dialog = new FileMetaDataConfigurationDialog(this);
|
||||||
dialog->setDescription(i18nc("@label::textbox",
|
dialog->setDescription(i18nc("@label::textbox",
|
||||||
|
|
|
@ -141,73 +141,80 @@ InformationPanelContent::~InformationPanelContent()
|
||||||
|
|
||||||
void InformationPanelContent::showItem(const KFileItem& item)
|
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
|
// 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).
|
// multiple items running, and thus a race condition (bug 250787).
|
||||||
if (m_previewJob) {
|
if (m_previewJob) {
|
||||||
m_previewJob->kill();
|
m_previewJob->kill();
|
||||||
}
|
}
|
||||||
|
|
||||||
const QUrl itemUrl = item.url();
|
if (InformationPanelSettings::previewsShown()) {
|
||||||
const bool isSearchUrl = itemUrl.scheme().contains(QStringLiteral("search")) && item.localPath().isEmpty();
|
m_preview->show();
|
||||||
setNameLabelText(item.text());
|
|
||||||
if (isSearchUrl) {
|
const QUrl itemUrl = m_item.url();
|
||||||
// in the case of a search-URL the URL is not readable for humans
|
const bool isSearchUrl = itemUrl.scheme().contains(QStringLiteral("search")) && m_item.localPath().isEmpty();
|
||||||
// (at least not useful to show in the Information Panel)
|
setNameLabelText(m_item.text());
|
||||||
m_preview->setPixmap(
|
if (isSearchUrl) {
|
||||||
QIcon::fromTheme(QStringLiteral("nepomuk")).pixmap(KIconLoader::SizeEnormous, KIconLoader::SizeEnormous)
|
// 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 {
|
} else {
|
||||||
// try to get a preview pixmap from the item...
|
m_preview->hide();
|
||||||
|
m_phononWidget->hide();
|
||||||
// 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);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void InformationPanelContent::refreshMetaData() {
|
||||||
if (m_metaDataWidget) {
|
if (m_metaDataWidget) {
|
||||||
m_metaDataWidget->setDateFormat(static_cast<Baloo::DateFormats>(InformationPanelSettings::dateFormat()));
|
m_metaDataWidget->setDateFormat(static_cast<Baloo::DateFormats>(InformationPanelSettings::dateFormat()));
|
||||||
m_metaDataWidget->show();
|
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)
|
void InformationPanelContent::showItems(const KFileItemList& items)
|
||||||
|
@ -290,10 +297,6 @@ void InformationPanelContent::markOutdatedPreview()
|
||||||
m_preview->setPixmap(disabledPixmap);
|
m_preview->setPixmap(disabledPixmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InformationPanelContent::setPreviewVisible(bool visible) {
|
|
||||||
m_preview->setVisible(visible);
|
|
||||||
}
|
|
||||||
|
|
||||||
KFileItemList InformationPanelContent::items() {
|
KFileItemList InformationPanelContent::items() {
|
||||||
return m_metaDataWidget->items();
|
return m_metaDataWidget->items();
|
||||||
}
|
}
|
||||||
|
@ -303,13 +306,6 @@ void InformationPanelContent::slotHasVideoChanged(bool hasVideo)
|
||||||
m_preview->setVisible(InformationPanelSettings::previewsShown() && !hasVideo);
|
m_preview->setVisible(InformationPanelSettings::previewsShown() && !hasVideo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InformationPanelContent::refreshMetaData()
|
|
||||||
{
|
|
||||||
if (!m_item.isNull()) {
|
|
||||||
showItem(m_item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void InformationPanelContent::setNameLabelText(const QString& text)
|
void InformationPanelContent::setNameLabelText(const QString& text)
|
||||||
{
|
{
|
||||||
QTextOption textOption;
|
QTextOption textOption;
|
||||||
|
|
|
@ -68,21 +68,24 @@ public:
|
||||||
void showItem(const KFileItem& item);
|
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 showItems(const KFileItemList& items);
|
||||||
|
|
||||||
void setPreviewVisible(bool visible);
|
|
||||||
|
|
||||||
KFileItemList items();
|
KFileItemList items();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refreshes the preview display, hiding it if needed
|
||||||
|
*/
|
||||||
|
void refreshPreview();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void urlActivated( const QUrl& url );
|
void urlActivated( const QUrl& url );
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
/**
|
/**
|
||||||
* Is invoked after the file meta data configuration dialog has been
|
* 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();
|
void refreshMetaData();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue