┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dolphinviewcontainer.cpp6
-rw-r--r--src/panels/information/informationpanel.cpp28
-rw-r--r--src/panels/information/informationpanel.h8
-rw-r--r--src/panels/information/informationpanelcontent.cpp14
4 files changed, 37 insertions, 19 deletions
diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp
index 28ffc23e4..9d33329e5 100644
--- a/src/dolphinviewcontainer.cpp
+++ b/src/dolphinviewcontainer.cpp
@@ -279,7 +279,7 @@ void DolphinViewContainer::updateStatusBar()
void DolphinViewContainer::initializeProgress()
{
if (url().protocol() == "nepomuksearch") {
- // The Nepomuk IO-slave does not provide any progress information. Give
+ // The Nepomuk IO-slave does not provide progress information right away. Give
// an immediate hint to the user that a searching is done:
m_statusBar->setProgressText(i18nc("@info", "Searching..."));
m_statusBar->setProgress(-1);
@@ -433,13 +433,13 @@ void DolphinViewContainer::redirect(const KUrl& oldUrl, const KUrl& newUrl)
Q_UNUSED(oldUrl);
const bool block = m_urlNavigator->signalsBlocked();
m_urlNavigator->blockSignals(true);
-
+
// Assure that the location state is reset for redirection URLs. This
// allows to skip redirection URLs when going back or forward in the
// URL history.
m_urlNavigator->saveLocationState(QByteArray());
m_urlNavigator->setLocationUrl(newUrl);
-
+
m_urlNavigator->blockSignals(block);
}
diff --git a/src/panels/information/informationpanel.cpp b/src/panels/information/informationpanel.cpp
index f15cf05d5..2d6810c88 100644
--- a/src/panels/information/informationpanel.cpp
+++ b/src/panels/information/informationpanel.cpp
@@ -23,6 +23,8 @@
#include <QVBoxLayout>
#include "informationpanelcontent.h"
+#include <kio/job.h>
+
InformationPanel::InformationPanel(QWidget* parent) :
Panel(parent),
m_initialized(false),
@@ -34,6 +36,7 @@ InformationPanel::InformationPanel(QWidget* parent) :
m_invalidUrlCandidate(),
m_fileItem(),
m_selection(),
+ m_folderStatJob(0),
m_content(0)
{
}
@@ -170,17 +173,28 @@ void InformationPanel::showItemInfo()
} else if (!m_selection.isEmpty()) {
Q_ASSERT(m_selection.count() == 1);
item = m_selection.first();
- } else {
+ }
+
+ if ( item.isNull() ) {
// no item is hovered and no selection has been done: provide
// an item for the directory represented by m_shownUrl
- item = KFileItem(KFileItem::Unknown, KFileItem::Unknown, m_shownUrl);
- item.refresh();
+ m_folderStatJob = KIO::stat(m_shownUrl, KIO::HideProgressInfo);
+ connect(m_folderStatJob, SIGNAL(result(KJob*)),
+ this, SLOT(slotFolderStatFinished(KJob*)));
+ }
+ else {
+ m_content->showItem(item);
}
-
- m_content->showItem(item);
}
}
+void InformationPanel::slotFolderStatFinished(KJob* job)
+{
+ m_folderStatJob = 0;
+ const KIO::UDSEntry entry = static_cast<KIO::StatJob*>(job)->statResult();
+ m_content->showItem(KFileItem(entry, m_shownUrl));
+}
+
void InformationPanel::slotInfoTimeout()
{
m_shownUrl = m_urlCandidate;
@@ -272,6 +286,8 @@ void InformationPanel::slotLeftDirectory(const QString& directory)
void InformationPanel::cancelRequest()
{
+ delete m_folderStatJob;
+ m_folderStatJob = 0;
m_infoTimer->stop();
}
@@ -324,7 +340,7 @@ void InformationPanel::init()
m_content = new InformationPanelContent(this);
connect(m_content, SIGNAL(urlActivated(KUrl)), this, SIGNAL(urlActivated(KUrl)));
-
+
QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(m_content);
diff --git a/src/panels/information/informationpanel.h b/src/panels/information/informationpanel.h
index 0622a79a2..e0768bc1b 100644
--- a/src/panels/information/informationpanel.h
+++ b/src/panels/information/informationpanel.h
@@ -77,6 +77,12 @@ private slots:
void showItemInfo();
/**
+ * Shows the information for the currently displayed folder as a result from
+ * a stat job issued in showItemInfo().
+ */
+ void slotFolderStatFinished(KJob* job);
+
+ /**
* Triggered if the request for item information has timed out.
* @see InformationPanel::requestDelayedItemInfo()
*/
@@ -154,6 +160,8 @@ private:
KFileItem m_fileItem; // file item for m_shownUrl if available (otherwise null)
KFileItemList m_selection;
+ KJob* m_folderStatJob;
+
InformationPanelContent* m_content;
};
diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp
index 5254eb2eb..b18e6b26e 100644
--- a/src/panels/information/informationpanelcontent.cpp
+++ b/src/panels/information/informationpanelcontent.cpp
@@ -150,6 +150,7 @@ void InformationPanelContent::showItem(const KFileItem& item)
const KUrl itemUrl = item.url();
const bool isNepomukSearchUrl = itemUrl.protocol().startsWith("nepomuk") && item.nepomukUri().isEmpty();
if (!applyPlace(itemUrl)) {
+ setNameLabelText(item.text());
if (isNepomukSearchUrl) {
// in the case of a Nepomuk query-URL the URL is not readable for humans
// (at least not useful to show in the Information Panel)
@@ -158,7 +159,6 @@ void InformationPanelContent::showItem(const KFileItem& item)
KIconLoader::NoGroup,
KIconLoader::SizeEnormous);
m_preview->setPixmap(icon);
- setNameLabelText(QString());
} else {
// try to get a preview pixmap from the item...
m_pendingPreview = true;
@@ -184,18 +184,12 @@ void InformationPanelContent::showItem(const KFileItem& item)
this, SLOT(showPreview(const KFileItem&, const QPixmap&)));
connect(job, SIGNAL(failed(const KFileItem&)),
this, SLOT(showIcon(const KFileItem&)));
-
- setNameLabelText(item.text());
}
}
if (m_metaDataWidget != 0) {
- if (isNepomukSearchUrl) {
- m_metaDataWidget->hide();
- } else {
- m_metaDataWidget->show();
- m_metaDataWidget->setItems(KFileItemList() << item);
- }
+ m_metaDataWidget->show();
+ m_metaDataWidget->setItems(KFileItemList() << item);
}
if (InformationPanelSettings::showPreview()) {
@@ -377,7 +371,7 @@ void InformationPanelContent::setNameLabelText(const QString& text)
textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
const QString processedText = Qt::mightBeRichText(text) ? text : KStringHandler::preProcessWrap(text);
-
+
QTextLayout textLayout(processedText);
textLayout.setFont(m_nameLabel->font());
textLayout.setTextOption(textOption);