mirror of https://github.com/helix-editor/helix
Prevent multiple code action popups
parent
547c3ecd0c
commit
5995568c1d
|
@ -2792,11 +2792,7 @@ pub mod cmd {
|
||||||
Box::new(move |editor: &mut Editor, compositor: &mut Compositor| {
|
Box::new(move |editor: &mut Editor, compositor: &mut Compositor| {
|
||||||
let contents = ui::Markdown::new(contents, editor.syn_loader.clone());
|
let contents = ui::Markdown::new(contents, editor.syn_loader.clone());
|
||||||
let popup = Popup::new("hover", contents);
|
let popup = Popup::new("hover", contents);
|
||||||
if let Some(doc_popup) = compositor.find_id("hover") {
|
compositor.replace_or_push("hover", Box::new(popup));
|
||||||
*doc_popup = popup;
|
|
||||||
} else {
|
|
||||||
compositor.push(Box::new(popup));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
Ok(call)
|
Ok(call)
|
||||||
};
|
};
|
||||||
|
@ -3537,7 +3533,7 @@ pub fn code_action(cx: &mut Context) {
|
||||||
vertical: 1,
|
vertical: 1,
|
||||||
horizontal: 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 =
|
let contents =
|
||||||
ui::Markdown::new(contents, editor.syn_loader.clone()).style_group("hover");
|
ui::Markdown::new(contents, editor.syn_loader.clone()).style_group("hover");
|
||||||
let popup = Popup::new("hover", contents);
|
let popup = Popup::new("hover", contents);
|
||||||
if let Some(doc_popup) = compositor.find_id("hover") {
|
compositor.replace_or_push("hover", Box::new(popup));
|
||||||
*doc_popup = popup;
|
|
||||||
} else {
|
|
||||||
compositor.push(Box::new(popup));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -126,6 +126,16 @@ impl Compositor {
|
||||||
self.layers.push(layer);
|
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>> {
|
pub fn pop(&mut self) -> Option<Box<dyn Component>> {
|
||||||
self.layers.pop()
|
self.layers.pop()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue