diff options
| -rw-r--r-- | src/dolphinviewcontainer.cpp | 6 | ||||
| -rw-r--r-- | src/panels/information/informationpanel.cpp | 28 | ||||
| -rw-r--r-- | src/panels/information/informationpanel.h | 8 | ||||
| -rw-r--r-- | src/panels/information/informationpanelcontent.cpp | 14 |
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); |
