diff options
| author | Carlo Vanini <silhusk@gmail.com> | 2016-03-03 08:52:01 (GMT) |
|---|---|---|
| committer | Carlo Vanini <silhusk@gmail.com> | 2016-03-03 08:53:24 (GMT) |
| commit | a437d39e43112a3e61ebafadd4e3a06b9bd91437 (patch) | |
| tree | e4e2ac37f920fc95c9fabec5ad01b570c135e7bf | |
| parent | 465ca5fcf203fa190b90823907f358954b922f5f (diff) | |
Connect to backend signals to catch cache reload.
When the cache is reloaded libqapt deletes Package objects and creates them
anew. This results in dangling pointers in muon models.
When "Preview Changes" is shown we have two models with lists of packages, and
both should be cleared and repopulated.
The cache reload can be triggered by pinning/unpinning (lock/unlock) a package.
REVIEW: 127107
BUG: 332530
| -rw-r--r-- | src/MainWindow.cpp | 2 | ||||
| -rw-r--r-- | src/PackageModel/PackageWidget.cpp | 14 | ||||
| -rw-r--r-- | src/PackageModel/PackageWidget.h | 2 | ||||
| -rw-r--r-- | src/StatusWidget.cpp | 2 |
4 files changed, 19 insertions, 1 deletions
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 9bcec05..8e71b9f 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -136,6 +136,8 @@ void MainWindow::initObject() emit backendReady(m_backend); connect(m_backend, SIGNAL(packageChanged()), this, SLOT(setActionsEnabled())); + connect(m_backend, SIGNAL(cacheReloadFinished()), + this, SLOT(setActionsEnabled())); // Set up GUI loadSettings(); diff --git a/src/PackageModel/PackageWidget.cpp b/src/PackageModel/PackageWidget.cpp index 264db78..ea4307b 100644 --- a/src/PackageModel/PackageWidget.cpp +++ b/src/PackageModel/PackageWidget.cpp @@ -240,6 +240,8 @@ void PackageWidget::setBackend(QApt::Backend *backend) m_backend = backend; connect(m_backend, SIGNAL(packageChanged()), m_detailsWidget, SLOT(refreshTabs())); connect(m_backend, SIGNAL(packageChanged()), m_model, SLOT(externalDataChanged())); + connect(m_backend, SIGNAL(cacheReloadStarted()), this, SLOT(cacheReloadStarted())); + connect(m_backend, SIGNAL(cacheReloadFinished()), this, SLOT(cacheReloadFinished())); m_detailsWidget->setBackend(backend); m_proxyModel->setBackend(m_backend); @@ -253,17 +255,27 @@ void PackageWidget::setBackend(QApt::Backend *backend) void PackageWidget::reload() { + m_backend->reloadCache(); +} + +void PackageWidget::cacheReloadStarted() +{ m_detailsWidget->clear(); m_model->clear(); m_proxyModel->clear(); + m_proxyModel->reset(); m_proxyModel->setSourceModel(0); m_busyWidget->start(); - m_backend->reloadCache(); +} + +void PackageWidget::cacheReloadFinished() +{ QApt::PackageList packageList = m_backend->availablePackages(); QFuture<QList<QApt::Package*> > future = QtConcurrent::run(sortPackages, packageList); m_watcher->setFuture(future); m_proxyModel->setSourceModel(m_model); m_packageView->header()->setSectionResizeMode(0, QHeaderView::Stretch); + startSearch(); } void PackageWidget::packageActivated(const QModelIndex &index) diff --git a/src/PackageModel/PackageWidget.h b/src/PackageModel/PackageWidget.h index 681b59e..def2ef8 100644 --- a/src/PackageModel/PackageWidget.h +++ b/src/PackageModel/PackageWidget.h @@ -106,6 +106,8 @@ private: public Q_SLOTS: void setBackend(QApt::Backend *backend); void reload(); + void cacheReloadStarted(); + void cacheReloadFinished(); void setFocusSearchEdit(); void startSearch(); void invalidateFilter(); diff --git a/src/StatusWidget.cpp b/src/StatusWidget.cpp index ecd17ea..eff15b9 100644 --- a/src/StatusWidget.cpp +++ b/src/StatusWidget.cpp @@ -73,6 +73,8 @@ void StatusWidget::setBackend(QApt::Backend *backend) m_backend = backend; connect(m_backend, SIGNAL(packageChanged()), this, SLOT(updateStatus())); + connect(m_backend, SIGNAL(cacheReloadFinished()), + this, SLOT(updateStatus())); connect(m_backend, SIGNAL(xapianUpdateStarted()), this, SLOT(showXapianProgress())); connect(m_backend, SIGNAL(xapianUpdateProgress(int)), |
