Prevent multiple code action popups
This commit is contained in:
parent
547c3ecd0c
commit
5995568c1d
2 changed files with 13 additions and 11 deletions
|
@ -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));
|
||||
}
|
||||
},
|
||||
);
|
||||
|
|
|
@ -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<dyn Component>) {
|
||||
if let Some(component) = self.find_id(id) {
|
||||
*component = layer;
|
||||
} else {
|
||||
self.push(layer)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn pop(&mut self) -> Option<Box<dyn Component>> {
|
||||
self.layers.pop()
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue