summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/assistant/lib/qhelpcontentwidget.cpp27
1 files changed, 18 insertions, 9 deletions
diff --git a/tools/assistant/lib/qhelpcontentwidget.cpp b/tools/assistant/lib/qhelpcontentwidget.cpp
index 8697cdfc4f..ff599f8e21 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"