Преглед изворни кода

SystemMonitor: Invalidate ProcessModel indexes when necessary

If the process table grows or shrinks, we need to invalidate all the
ProcessModel indexes. This is not great, but it's the most precise
invalidation we can do at the moment.
Andreas Kling пре 4 година
родитељ
комит
b9ae937279
1 измењених фајлова са 4 додато и 1 уклоњено
  1. 4 1
      Applications/SystemMonitor/ProcessModel.cpp

+ 4 - 1
Applications/SystemMonitor/ProcessModel.cpp

@@ -352,6 +352,7 @@ GUI::Variant ProcessModel::data(const GUI::ModelIndex& index, Role role) const
 
 
 void ProcessModel::update()
 void ProcessModel::update()
 {
 {
+    auto previous_pid_count = m_pids.size();
     auto all_processes = Core::ProcessStatisticsReader::get_all();
     auto all_processes = Core::ProcessStatisticsReader::get_all();
 
 
     unsigned last_sum_times_scheduled = 0;
     unsigned last_sum_times_scheduled = 0;
@@ -434,5 +435,7 @@ void ProcessModel::update()
     if (on_cpu_info_change)
     if (on_cpu_info_change)
         on_cpu_info_change(m_cpus);
         on_cpu_info_change(m_cpus);
 
 
-    did_update(GUI::Model::UpdateFlag::DontInvalidateIndexes);
+    // FIXME: This is a rather hackish way of invalidating indexes.
+    //        It would be good if GUI::Model had a way to orchestrate removal/insertion while preserving indexes.
+    did_update(previous_pid_count == m_pids.size() ? GUI::Model::UpdateFlag::DontInvalidateIndexes : GUI::Model::UpdateFlag::InvalidateAllIndexes);
 }
 }