summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlo Vanini <silhusk@gmail.com>2016-03-03 08:52:01 (GMT)
committerCarlo Vanini <silhusk@gmail.com>2016-03-03 08:53:24 (GMT)
commita437d39e43112a3e61ebafadd4e3a06b9bd91437 (patch)
treee4e2ac37f920fc95c9fabec5ad01b570c135e7bf
parent465ca5fcf203fa190b90823907f358954b922f5f (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.cpp2
-rw-r--r--src/PackageModel/PackageWidget.cpp14
-rw-r--r--src/PackageModel/PackageWidget.h2
-rw-r--r--src/StatusWidget.cpp2
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)),