diff --git a/src/filemetadataprovider.h b/src/filemetadataprovider.h --- a/src/filemetadataprovider.h +++ b/src/filemetadataprovider.h @@ -105,12 +105,15 @@ Q_SIGNALS: /** - * Is emitted after the loading triggered by KFileMetaDataProvider::setItems() - * has been finished. - * - * Can be emitted multiple times to indicate data changes + * Emitted once per KFileMetaDataProvider::setItems() + * after data loading is finished. */ void loadingFinished(); + /** + * Indicates data changes. + * Can be emitted zero or more times + */ + void dataAvailable(); private Q_SLOTS: void slotLoadingFinished(KJob* job); diff --git a/src/filemetadataprovider.cpp b/src/filemetadataprovider.cpp --- a/src/filemetadataprovider.cpp +++ b/src/filemetadataprovider.cpp @@ -316,13 +316,13 @@ if (!m_config.fileIndexingEnabled() || !m_config.shouldBeIndexed(filePath)) { m_realTimeIndexing = true; + insertBasicData(); + insertEditableData(); + emit dataAvailable(); + IndexedDataRetriever *ret = new IndexedDataRetriever(filePath, this); connect(ret, SIGNAL(finished(KJob*)), this, SLOT(slotLoadingFinished(KJob*))); ret->start(); - - insertBasicData(); - insertEditableData(); - emit loadingFinished(); } else { FileFetchJob* job = new FileFetchJob(QStringList() << filePath, this); @@ -351,10 +351,13 @@ FileFetchJob* job = new FileFetchJob(urls, this); connect(job, SIGNAL(finished(KJob*)), this, SLOT(slotFileFetchFinished(KJob*))); job->start(); + insertBasicData(); + emit dataAvailable(); + } else { + insertBasicData(); + emit loadingFinished(); } - insertBasicData(); - emit loadingFinished(); } void FileMetaDataProvider::setItems(const KFileItemList& items) @@ -478,7 +481,6 @@ return m_data; } - int FileMetaDataProvider::subDirectoriesCount(const QString& path) { #ifdef Q_OS_WIN diff --git a/src/filemetadatawidget.h b/src/filemetadatawidget.h --- a/src/filemetadatawidget.h +++ b/src/filemetadatawidget.h @@ -80,6 +80,7 @@ Private* d; Q_PRIVATE_SLOT(d, void slotLoadingFinished()) + Q_PRIVATE_SLOT(d, void slotDataAvailable()) Q_PRIVATE_SLOT(d, void slotLinkActivated(QString)) Q_PRIVATE_SLOT(d, void slotDataChangeStarted()) Q_PRIVATE_SLOT(d, void slotDataChangeFinished()) diff --git a/src/filemetadatawidget.cpp b/src/filemetadatawidget.cpp --- a/src/filemetadatawidget.cpp +++ b/src/filemetadatawidget.cpp @@ -63,6 +63,7 @@ void deleteRows(); void slotLoadingFinished(); + void slotDataAvailable(); void slotLinkActivated(const QString& link); void slotDataChangeStarted(); void slotDataChangeFinished(); @@ -94,6 +95,7 @@ // TODO: If KFileMetaDataProvider might get a public class in future KDE releases, // the following code should be moved into KFileMetaDataWidget::setModel(): m_provider = new FileMetaDataProvider(q); + connect(m_provider, SIGNAL(dataAvailable()), q, SLOT(slotDataAvailable())); connect(m_provider, SIGNAL(loadingFinished()), q, SLOT(slotLoadingFinished())); } @@ -112,6 +114,12 @@ } void FileMetaDataWidget::Private::slotLoadingFinished() +{ + slotDataAvailable(); + emit q->metaDataRequestFinished(m_provider->items()); +} + +void FileMetaDataWidget::Private::slotDataAvailable() { deleteRows(); @@ -161,7 +169,7 @@ } q->updateGeometry(); - emit q->metaDataRequestFinished(m_provider->items()); + } void FileMetaDataWidget::Private::slotLinkActivated(const QString& link)