1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-01 14:20:04 -04:00

Making the Window::show to be sync

This commit is contained in:
Konkitoman
2023-08-02 21:29:24 +03:00
parent 2057993f54
commit 70b9d8f1c5

View File

@@ -424,19 +424,19 @@ impl<'open> Window<'open> {
/// Returns `None` if the window is not open (if [`Window::open`] was called with `&mut false`). /// Returns `None` if the window is not open (if [`Window::open`] was called with `&mut false`).
/// Returns `Some(InnerResponse { inner: None })` if the window is collapsed. /// Returns `Some(InnerResponse { inner: None })` if the window is collapsed.
#[inline] #[inline]
pub fn show( pub fn show<R>(
self, self,
ctx: &Context, ctx: &Context,
add_contents: impl Fn(&mut Ui, u64, u64) + Send + Sync + 'static, add_contents: impl FnOnce(&mut Ui, u64, u64) -> R,
) { ) -> Option<InnerResponse<Option<R>>> {
self.show_dyn(ctx, Box::new(add_contents)) self.show_dyn(ctx, Box::new(add_contents))
} }
fn show_dyn( fn show_dyn<'a, R>(
self, self,
ctx: &Context, ctx: &Context,
add_contents: Box<dyn Fn(&mut Ui, u64, u64) + Send + Sync + 'static>, add_contents: Box<dyn FnOnce(&mut Ui, u64, u64) -> R + 'a>,
) { ) -> Option<InnerResponse<Option<R>>> {
let Window { let Window {
title, title,
mut open, mut open,
@@ -451,7 +451,7 @@ impl<'open> Window<'open> {
} = self; } = self;
let embedded = let embedded =
ctx.data_mut(|data| *data.get_persisted_mut_or(area.id.with("_embedded"), false)); ctx.data_mut(|data| *data.get_persisted_mut_or(area.id.with("_embedded"), true));
let is_open = if let Some(open) = &mut open { let is_open = if let Some(open) = &mut open {
if let Some(tmp_open) = ctx.data_mut(|data| { if let Some(tmp_open) = ctx.data_mut(|data| {
@@ -469,7 +469,7 @@ impl<'open> Window<'open> {
let is_open = is_open || ctx.memory(|mem| mem.everything_is_visible()); let is_open = is_open || ctx.memory(|mem| mem.everything_is_visible());
if !is_open { if !is_open {
return; return None;
} }
let show_close_button = open.is_some(); let show_close_button = open.is_some();
@@ -501,7 +501,7 @@ impl<'open> Window<'open> {
window_builder.max_inner_size = Some((max_size.x as u32, max_size.y as u32)); window_builder.max_inner_size = Some((max_size.x as u32, max_size.y as u32));
} }
ctx.create_viewport( ctx.create_viewport_sync(
window_builder, window_builder,
move |ctx, viewport_id, parent_viewport_id| { move |ctx, viewport_id, parent_viewport_id| {
let mut op = is_open; let mut op = is_open;
@@ -733,9 +733,14 @@ impl<'open> Window<'open> {
ctx.data_mut(|data| data.insert_persisted(area_id.with("_open"), op)); ctx.data_mut(|data| data.insert_persisted(area_id.with("_open"), op));
ctx.request_repaint_viewport(parent_viewport_id); ctx.request_repaint_viewport(parent_viewport_id);
} }
return Some(InnerResponse {
inner: content_inner,
response: full_response,
});
}, },
); );
return; return None;
} }
} }
let frame = frame.unwrap_or_else(|| Frame::window(&ctx.style())); let frame = frame.unwrap_or_else(|| Frame::window(&ctx.style()));
@@ -889,6 +894,7 @@ impl<'open> Window<'open> {
inner: content_inner, inner: content_inner,
response: full_response, response: full_response,
}; };
Some(inner_response)
} }
} }