gpui: Simplify uniform list API by removing entity param (#32480)

This PR also introduces `Context::processor`, a sibling of
`Context::listener` that takes a strong pointer to entity and allows for
a return result.

Release Notes:

- N/A

Co-authored-by: Mikayla <mikayla@zed.dev>
This commit is contained in:
Ben Kunkle 2025-06-10 13:50:57 -05:00 committed by GitHub
parent c55630889a
commit f567bb52ff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 80 additions and 77 deletions

View file

@ -1,4 +1,5 @@
use std::{
ops::Range,
path::{Path, PathBuf},
sync::Arc,
time::Duration,
@ -277,10 +278,9 @@ impl BreakpointList {
let selected_ix = self.selected_ix;
let focus_handle = self.focus_handle.clone();
uniform_list(
cx.entity(),
"breakpoint-list",
self.breakpoints.len(),
move |this, range, window, cx| {
cx.processor(move |this, range: Range<usize>, window, cx| {
range
.clone()
.zip(&mut this.breakpoints[range])
@ -291,7 +291,7 @@ impl BreakpointList {
.into_any_element()
})
.collect()
},
}),
)
.track_scroll(self.scroll_handle.clone())
.flex_grow()

View file

@ -8,7 +8,7 @@ use project::{
ProjectItem as _, ProjectPath,
debugger::session::{Session, SessionEvent},
};
use std::{path::Path, sync::Arc};
use std::{ops::Range, path::Path, sync::Arc};
use ui::{Scrollbar, ScrollbarState, prelude::*};
use workspace::Workspace;
@ -281,10 +281,11 @@ impl ModuleList {
fn render_list(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
uniform_list(
cx.entity(),
"module-list",
self.entries.len(),
|this, range, _window, cx| range.map(|ix| this.render_entry(ix, cx)).collect(),
cx.processor(|this, range: Range<usize>, _window, cx| {
range.map(|ix| this.render_entry(ix, cx)).collect()
}),
)
.track_scroll(self.scroll_handle.clone())
.size_full()

View file

@ -980,10 +980,11 @@ impl Render for VariableList {
.on_action(cx.listener(Self::edit_variable))
.child(
uniform_list(
cx.entity().clone(),
"variable-list",
self.entries.len(),
move |this, range, window, cx| this.render_entries(range, window, cx),
cx.processor(move |this, range: Range<usize>, window, cx| {
this.render_entries(range, window, cx)
}),
)
.track_scroll(self.list_handle.clone())
.gap_1_5()