]> cloud.milkyroute.net Git - dolphin.git/commitdiff
[InformationPanel] Hide the video when the preview is disabled, avoid computing the...
authorMéven Car <meven29@gmail.com>
Sun, 24 Mar 2019 17:32:25 +0000 (18:32 +0100)
committerMéven Car <meven29@gmail.com>
Sun, 24 Mar 2019 17:34:32 +0000 (18:34 +0100)
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

src/panels/information/informationpanel.cpp
src/panels/information/informationpanelcontent.cpp
src/panels/information/informationpanelcontent.h

index a864cb00574987e331411e00defe8b4b5ba6ed10..cd8b6b38d354629a2f60b3db9747720c16427087 100644 (file)
@@ -198,8 +198,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",
index 4b34e55e32b5164d349f8f1d4ea42d9c282413ec..e2b90dcc894da300810b0b6c250e3afe61c4765f 100644 (file)
@@ -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)
-        );
-    } 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();
-        }
+    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() << 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);
-        }
+            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);
-    }
+            connect(m_previewJob.data(), &KIO::PreviewJob::gotPreview,
+                    this, &InformationPanelContent::showPreview);
+            connect(m_previewJob.data(), &KIO::PreviewJob::failed,
+                    this, &InformationPanelContent::showIcon);
 
-    if (m_metaDataWidget) {
-        m_metaDataWidget->setDateFormat(static_cast<Baloo::DateFormats>(InformationPanelSettings::dateFormat()));
-        m_metaDataWidget->show();
-        m_metaDataWidget->setItems(KFileItemList() << 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()) {
+            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 {
-            m_phononWidget->hide();
-            m_preview->setVisible(true);
         }
     } else {
+        m_preview->hide();
         m_phononWidget->hide();
     }
+}
 
-    m_item = item;
+void InformationPanelContent::refreshMetaData() {
+    if (m_metaDataWidget) {
+        m_metaDataWidget->setDateFormat(static_cast<Baloo::DateFormats>(InformationPanelSettings::dateFormat()));
+        m_metaDataWidget->show();
+        m_metaDataWidget->setItems(KFileItemList() << m_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;
index a80775aaa614f1fa9dc4bb2a8168ead03ab6a62f..83fb3d80babad03faa86de1f36112d2685eab8e5 100644 (file)
@@ -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();