widget::popover: add show_popup to allow disabling overlay

This commit is contained in:
Jeremy Soller 2024-01-05 10:55:10 -07:00
parent 1bd39b17ae
commit 4674e4b23e

View file

@ -28,6 +28,7 @@ pub struct Popover<'a, Message, Renderer> {
// XXX Avoid refcell; improve iced overlay API?
popup: RefCell<Element<'a, Message, Renderer>>,
position: Option<Point>,
show_popup: bool,
}
impl<'a, Message, Renderer> Popover<'a, Message, Renderer> {
@ -39,6 +40,7 @@ impl<'a, Message, Renderer> Popover<'a, Message, Renderer> {
content: content.into(),
popup: RefCell::new(popup.into()),
position: None,
show_popup: true,
}
}
@ -47,6 +49,11 @@ impl<'a, Message, Renderer> Popover<'a, Message, Renderer> {
self
}
pub fn show_popup(mut self, show_popup: bool) -> Self {
self.show_popup = show_popup;
self
}
// TODO More options for positioning similar to GdkPopup, xdg_popup
}
@ -160,6 +167,10 @@ where
layout: Layout<'_>,
_renderer: &Renderer,
) -> Option<overlay::Element<'b, Message, Renderer>> {
if !self.show_popup {
return None;
}
let bounds = layout.bounds();
let (position, centered) = match self.position {
Some(relative) => (