@@ -49,26 +49,26 @@ Categories::~Categories()
49DeeListModel*
49DeeListModel*
50Categories::getFilter(int index) const
50Categories::getFilter(int index) const
52− if (!m_filters.contains(index)) {
52+ if (!m_results.contains(index) || m_results[index].isNull()) {
53− auto results = std::make_shared<CategoryResults> ();
53+ auto results = new CategoryResults;
54 results->setCategoryIndex(index);
54 results->setCategoryIndex(index);
55− connect(results.get(), SIGNAL(countChanged()), this, SLOT(onCountChanged()));
55+ connect(results, &DeeListModel::countChanged, this, &Categories::onCountChanged);
57 unsigned cat_index = static_cast<unsigned>(index);
57 unsigned cat_index = static_cast<unsigned>(index);
58 auto unity_results = m_unityScope->GetResultsForCategory(cat_index);
58 auto unity_results = m_unityScope->GetResultsForCategory(cat_index);
59 results->setModel(unity_results->model());
59 results->setModel(unity_results->model());
61− m_filters.insert(index, results);
61+ m_results.insert(index, results);
64− return m_filters[index].get();
64+ return m_results[index];
67void Categories::onCategoriesModelChanged(unity::glib::Object<DeeModel> model)
67void Categories::onCategoriesModelChanged(unity::glib::Object<DeeModel> model)
69− m_timerFilters.clear();
69+ m_updatedCategories.clear();
70− m_filters.clear();
70+ // FIXME: this might destroy the renderer view and re-create it, optimize?
71−
71+ m_results.clear();
72 setModel(model);
72 setModel(model);
@@ -81,22 +81,14 @@ Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
81 //setModel(m_unityScope->categories()->model());
81 //setModel(m_unityScope->categories()->model());
83 m_unityScope->categories()->model.changed.connect(sigc::mem_fun(this, &Categories::onCategoriesModelChanged));
83 m_unityScope->categories()->model.changed.connect(sigc::mem_fun(this, &Categories::onCategoriesModelChanged));
86− if (model != m_resultModel) {
87− Q_FOREACH(CategoryFilter* filter, m_filters) {
88− filter->setModel(m_resultModel);
95Categories::onCountChanged()
87Categories::onCountChanged()
97− DeeListModel* filter = qobject_cast<DeeListModel*>(sender());
89+ CategoryResults* results = qobject_cast<CategoryResults*>(sender());
98− if (filter) {
90+ if (results) {
99− m_timerFilters << filter;
91+ m_updatedCategories << results->categoryIndex();
100 m_timer.start();
92 m_timer.start();
@@ -106,12 +98,12 @@ Categories::onEmitCountChanged()
107 QVector<int> roles;
99 QVector<int> roles;
108 roles.append(Categories::RoleCount);
100 roles.append(Categories::RoleCount);
109− Q_FOREACH(DeeListModel* results, m_timerFilters) {
101+ Q_FOREACH(int cat_index, m_updatedCategories) {
110− auto cat_results = qobject_cast<CategoryResults*>(results);
102+ if (m_results[cat_index].isNull()) continue;
111− QModelIndex changedIndex = index(cat_results->categoryIndex());
103+ QModelIndex changedIndex = index(cat_index);
112 Q_EMIT dataChanged(changedIndex, changedIndex, roles);
104 Q_EMIT dataChanged(changedIndex, changedIndex, roles);
114− m_timerFilters.clear();
106+ m_updatedCategories.clear();
117QHash<int, QByteArray>
109QHash<int, QByteArray>