Skip to content

Commit 92dcfde

Browse files
authored
Fix circular reference issue around PopoverMenu again (#44084)
Follow up to #42351 Release Notes: - N/A
1 parent 4ef8433 commit 92dcfde

File tree

4 files changed

+24
-17
lines changed

4 files changed

+24
-17
lines changed

crates/agent_ui/src/acp/mode_selector.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ impl Render for ModeSelector {
161161
.map(|mode| mode.name.clone())
162162
.unwrap_or_else(|| "Unknown".into());
163163

164-
let this = cx.entity();
164+
let this = cx.weak_entity();
165165

166166
let icon = if self.menu_handle.is_deployed() {
167167
IconName::ChevronUp
@@ -222,7 +222,8 @@ impl Render for ModeSelector {
222222
y: px(-2.0),
223223
})
224224
.menu(move |window, cx| {
225-
Some(this.update(cx, |this, cx| this.build_context_menu(window, cx)))
225+
this.update(cx, |this, cx| this.build_context_menu(window, cx))
226+
.ok()
226227
})
227228
}
228229
}

crates/extensions_ui/src/extensions_ui.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,7 @@ impl ExtensionsPage {
739739
extension: &ExtensionMetadata,
740740
cx: &mut Context<Self>,
741741
) -> ExtensionCard {
742-
let this = cx.entity();
742+
let this = cx.weak_entity();
743743
let status = Self::extension_status(&extension.id, cx);
744744
let has_dev_extension = Self::dev_extension_exists(&extension.id, cx);
745745

@@ -889,13 +889,15 @@ impl ExtensionsPage {
889889
y: px(2.0),
890890
})
891891
.menu(move |window, cx| {
892-
Some(Self::render_remote_extension_context_menu(
893-
&this,
894-
extension_id.clone(),
895-
authors.clone(),
896-
window,
897-
cx,
898-
))
892+
this.upgrade().map(|this| {
893+
Self::render_remote_extension_context_menu(
894+
&this,
895+
extension_id.clone(),
896+
authors.clone(),
897+
window,
898+
cx,
899+
)
900+
})
899901
}),
900902
),
901903
),

crates/language_tools/src/lsp_log_view.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -937,7 +937,7 @@ impl Render for LspLogToolbarItemView {
937937
})
938938
.collect();
939939

940-
let log_toolbar_view = cx.entity();
940+
let log_toolbar_view = cx.weak_entity();
941941

942942
let lsp_menu = PopoverMenu::new("LspLogView")
943943
.anchor(Corner::TopLeft)
@@ -1021,7 +1021,7 @@ impl Render for LspLogToolbarItemView {
10211021
.icon_color(Color::Muted),
10221022
)
10231023
.menu(move |window, cx| {
1024-
let log_toolbar_view = log_toolbar_view.clone();
1024+
let log_toolbar_view = log_toolbar_view.upgrade()?;
10251025
let log_view = log_view.clone();
10261026
Some(ContextMenu::build(window, cx, move |this, window, _| {
10271027
this.entry(

crates/language_tools/src/syntax_tree_view.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -614,23 +614,27 @@ impl SyntaxTreeToolbarItemView {
614614
let active_layer = buffer_state.active_layer.clone()?;
615615
let active_buffer = buffer_state.buffer.read(cx).snapshot();
616616

617-
let view = cx.entity();
617+
let view = cx.weak_entity();
618618
Some(
619619
PopoverMenu::new("Syntax Tree")
620620
.trigger(Self::render_header(&active_layer))
621621
.menu(move |window, cx| {
622-
ContextMenu::build(window, cx, |mut menu, window, _| {
622+
ContextMenu::build(window, cx, |mut menu, _, _| {
623623
for (layer_ix, layer) in active_buffer.syntax_layers().enumerate() {
624+
let view = view.clone();
624625
menu = menu.entry(
625626
format!(
626627
"{} {}",
627628
layer.language.name(),
628629
format_node_range(layer.node())
629630
),
630631
None,
631-
window.handler_for(&view, move |view, window, cx| {
632-
view.select_layer(layer_ix, window, cx);
633-
}),
632+
move |window, cx| {
633+
view.update(cx, |view, cx| {
634+
view.select_layer(layer_ix, window, cx);
635+
})
636+
.ok();
637+
},
634638
);
635639
}
636640
menu

0 commit comments

Comments
 (0)