on master help sign in
Prevent multiple code action popups
commit5995568c1d23239a230d6e1bcbfc370e5c8cd287 authorGokul Soumya <gokulps15@gmail.com> dateTue 8 Feb 2022, 09:01 (5 years ago) parent547c3ec
2 files changed+13−11
helix-term/src/commands.rs+3−11 helix-term/src/compositor.rs+10
helix-term/src/commands.rs+3−11
@@ -2792,11 +2792,7 @@ pub mod cmd {
27922792 Box::new(move |editor: &mut Editor, compositor: &mut Compositor| {
27932793 let contents = ui::Markdown::new(contents, editor.syn_loader.clone());
27942794 let popup = Popup::new("hover", contents);
2795− if let Some(doc_popup) = compositor.find_id("hover") {
2796− *doc_popup = popup;
2797− } else {
2798− compositor.push(Box::new(popup));
2799− }
2795+ compositor.replace_or_push("hover", Box::new(popup));
28002796 });
28012797 Ok(call)
28022798 };
@@ -3537,7 +3533,7 @@ pub fn code_action(cx: &mut Context) {
35373533 vertical: 1,
35383534 horizontal: 1,
35393535 });
3540− compositor.push(Box::new(popup))
3536+ compositor.replace_or_push("code-action", Box::new(popup));
35413537 },
35423538 )
35433539}
@@ -5465,11 +5461,7 @@ fn hover(cx: &mut Context) {
54655461 let contents =
54665462 ui::Markdown::new(contents, editor.syn_loader.clone()).style_group("hover");
54675463 let popup = Popup::new("hover", contents);
5468− if let Some(doc_popup) = compositor.find_id("hover") {
5469− *doc_popup = popup;
5470− } else {
5471− compositor.push(Box::new(popup));
5472− }
5464+ compositor.replace_or_push("hover", Box::new(popup));
54735465 }
54745466 },
54755467 );
helix-term/src/compositor.rs+10
@@ -126,6 +126,16 @@ impl Compositor {
126126 self.layers.push(layer);
127127 }
128128
129+ /// Replace a component that has the given `id` with the new layer and if
130+ /// no component is found, push the layer normally.
131+ pub fn replace_or_push(&mut self, id: &'static str, layer: Box<dyn Component>) {
132+ if let Some(component) = self.find_id(id) {
133+ *component = layer;
134+ } else {
135+ self.push(layer)
136+ }
137+ }
138+
129139 pub fn pop(&mut self) -> Option<Box<dyn Component>> {
130140 self.layers.pop()
131141 }