Gracefully handle a view being updated and removed in the same tick

Nathan Sobo and Max Brunsfeld created

Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>

Change summary

gpui/src/presenter.rs | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)

Detailed changes

gpui/src/presenter.rs 🔗

@@ -55,15 +55,16 @@ impl Presenter {
         path
     }
 
-    pub fn invalidate(&mut self, invalidation: WindowInvalidation, app: &AppContext) {
-        for view_id in invalidation.updated {
-            self.rendered_views
-                .insert(view_id, app.render_view(self.window_id, view_id).unwrap());
-        }
+    pub fn invalidate(&mut self, mut invalidation: WindowInvalidation, app: &AppContext) {
         for view_id in invalidation.removed {
+            invalidation.updated.remove(&view_id);
             self.rendered_views.remove(&view_id);
             self.parents.remove(&view_id);
         }
+        for view_id in invalidation.updated {
+            self.rendered_views
+                .insert(view_id, app.render_view(self.window_id, view_id).unwrap());
+        }
     }
 
     pub fn build_scene(