From 5995568c1d23239a230d6e1bcbfc370e5c8cd287 Mon Sep 17 00:00:00 2001 From: Gokul Soumya Date: Tue, 8 Feb 2022 09:01:24 +0530 Subject: [PATCH] Prevent multiple code action popups --- helix-term/src/commands.rs | 14 +++----------- helix-term/src/compositor.rs | 10 ++++++++++ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index d9fb2d55..e766417c 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -2792,11 +2792,7 @@ pub mod cmd { Box::new(move |editor: &mut Editor, compositor: &mut Compositor| { let contents = ui::Markdown::new(contents, editor.syn_loader.clone()); let popup = Popup::new("hover", contents); - if let Some(doc_popup) = compositor.find_id("hover") { - *doc_popup = popup; - } else { - compositor.push(Box::new(popup)); - } + compositor.replace_or_push("hover", Box::new(popup)); }); Ok(call) }; @@ -3537,7 +3533,7 @@ pub fn code_action(cx: &mut Context) { vertical: 1, horizontal: 1, }); - compositor.push(Box::new(popup)) + compositor.replace_or_push("code-action", Box::new(popup)); }, ) } @@ -5465,11 +5461,7 @@ fn hover(cx: &mut Context) { let contents = ui::Markdown::new(contents, editor.syn_loader.clone()).style_group("hover"); let popup = Popup::new("hover", contents); - if let Some(doc_popup) = compositor.find_id("hover") { - *doc_popup = popup; - } else { - compositor.push(Box::new(popup)); - } + compositor.replace_or_push("hover", Box::new(popup)); } }, ); diff --git a/helix-term/src/compositor.rs b/helix-term/src/compositor.rs index 321f56a5..dd7ebe1d 100644 --- a/helix-term/src/compositor.rs +++ b/helix-term/src/compositor.rs @@ -126,6 +126,16 @@ impl Compositor { self.layers.push(layer); } + /// Replace a component that has the given `id` with the new layer and if + /// no component is found, push the layer normally. + pub fn replace_or_push(&mut self, id: &'static str, layer: Box) { + if let Some(component) = self.find_id(id) { + *component = layer; + } else { + self.push(layer) + } + } + pub fn pop(&mut self) -> Option> { self.layers.pop() }