diff options
-rw-r--r-- | tools/assistant/lib/qhelpcontentwidget.cpp | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/tools/assistant/lib/qhelpcontentwidget.cpp b/tools/assistant/lib/qhelpcontentwidget.cpp index 8697cdf..ff599f8 100644 --- a/tools/assistant/lib/qhelpcontentwidget.cpp +++ b/tools/assistant/lib/qhelpcontentwidget.cpp @@ -72,6 +72,7 @@ public: class QHelpContentProvider : public QThread { + Q_OBJECT public: QHelpContentProvider(QHelpEnginePrivate *helpEngine); ~QHelpContentProvider(); @@ -80,11 +81,13 @@ public: QHelpContentItem *rootItem(); int nextChildCount() const; +signals: + void finishedSuccessFully(); + private: void run(); QHelpEnginePrivate *m_helpEngine; - QHelpContentItem *m_rootItem; QStringList m_filterAttributes; QQueue<QHelpContentItem*> m_rootItems; QMutex m_mutex; @@ -195,7 +198,6 @@ QHelpContentProvider::QHelpContentProvider(QHelpEnginePrivate *helpEngine) : QThread(helpEngine) { m_helpEngine = helpEngine; - m_rootItem = 0; m_abort = false; } @@ -252,8 +254,7 @@ void QHelpContentProvider::run() QHelpContentItem *item = 0; m_mutex.lock(); - m_rootItem = new QHelpContentItem(QString(), QString(), 0); - m_rootItems.enqueue(m_rootItem); + QHelpContentItem * const rootItem = new QHelpContentItem(QString(), QString(), 0); QStringList atts = m_filterAttributes; const QStringList fileNames = m_helpEngine->orderedFileNameList; m_mutex.unlock(); @@ -261,9 +262,10 @@ void QHelpContentProvider::run() foreach (const QString &dbFileName, fileNames) { m_mutex.lock(); if (m_abort) { + delete rootItem; m_abort = false; m_mutex.unlock(); - break; + return; } m_mutex.unlock(); QHelpDBReader reader(dbFileName, @@ -291,8 +293,8 @@ CHECK_DEPTH: if (depth == 0) { m_mutex.lock(); item = new QHelpContentItem(title, link, - m_helpEngine->fileNameReaderMap.value(dbFileName), m_rootItem); - m_rootItem->appendChild(item); + m_helpEngine->fileNameReaderMap.value(dbFileName), rootItem); + rootItem->appendChild(item); m_mutex.unlock(); stack.push(item); _depth = 1; @@ -316,8 +318,10 @@ CHECK_DEPTH: } } m_mutex.lock(); + m_rootItems.enqueue(rootItem); m_abort = false; m_mutex.unlock(); + emit finishedSuccessFully(); } @@ -352,7 +356,7 @@ QHelpContentModel::QHelpContentModel(QHelpEnginePrivate *helpEngine) d->rootItem = 0; d->qhelpContentProvider = new QHelpContentProvider(helpEngine); - connect(d->qhelpContentProvider, SIGNAL(finished()), + connect(d->qhelpContentProvider, SIGNAL(finishedSuccessFully()), this, SLOT(insertContents()), Qt::QueuedConnection); connect(helpEngine->q, SIGNAL(readersAboutToBeInvalidated()), this, SLOT(invalidateContents())); } @@ -391,6 +395,9 @@ void QHelpContentModel::createContents(const QString &customFilterName) void QHelpContentModel::insertContents() { + QHelpContentItem * const newRootItem = d->qhelpContentProvider->rootItem(); + if (!newRootItem) + return; int count; if (d->rootItem) { count = d->rootItem->childCount() - 1; @@ -402,7 +409,7 @@ void QHelpContentModel::insertContents() count = d->qhelpContentProvider->nextChildCount() - 1; beginInsertRows(QModelIndex(), 0, count > 0 ? count : 0); - d->rootItem = d->qhelpContentProvider->rootItem(); + d->rootItem = newRootItem; endInsertRows(); reset(); emit contentsCreated(); @@ -589,3 +596,5 @@ void QHelpContentWidget::showLink(const QModelIndex &index) } QT_END_NAMESPACE + +#include "qhelpcontentwidget.moc" |