dock: Fix split_panel to use async. (#214)

This commit is contained in:
Jason Lee 2024-09-04 17:30:55 +08:00 committed by GitHub
parent 476f97d5e0
commit f2d75f7abd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 39 additions and 48 deletions

View file

@ -55,7 +55,10 @@ impl StoryWorkspace {
let dock_area = cx.new_view(|cx| DockArea::new("main-dock", stack_panel.clone(), cx));
let weak_dock_area = dock_area.downgrade();
let center_tab_panel = cx.new_view(|cx| TabPanel::new(None, weak_dock_area.clone(), cx));
let center_tab_panel = cx.new_view(|cx| {
let stack_panel = cx.new_view(|cx| StackPanel::new(Axis::Vertical, cx));
TabPanel::new(Some(stack_panel), weak_dock_area.clone(), cx)
});
let left_tab_panel = cx.new_view(|cx| {
let stack_panel = cx.new_view(|cx| StackPanel::new(Axis::Vertical, cx));
TabPanel::new(Some(stack_panel), weak_dock_area.clone(), cx)
@ -92,8 +95,7 @@ impl StoryWorkspace {
None,
false,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Input",
@ -104,8 +106,7 @@ impl StoryWorkspace {
None,
false,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Text",
@ -116,8 +117,7 @@ impl StoryWorkspace {
Some(px(200.)),
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Switch",
@ -128,8 +128,7 @@ impl StoryWorkspace {
None,
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Dropdowns",
@ -140,8 +139,7 @@ impl StoryWorkspace {
None,
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Modal",
@ -152,8 +150,7 @@ impl StoryWorkspace {
None,
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Popup",
@ -164,20 +161,18 @@ impl StoryWorkspace {
None,
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Tooltip",
"Displays a short message when users hover over an element.",
TooltipStory::view(cx).into(),
right_tab_panel.clone(),
Some(Placement::Top),
None,
None,
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"List",
@ -188,8 +183,7 @@ impl StoryWorkspace {
None,
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Icon",
@ -200,8 +194,7 @@ impl StoryWorkspace {
Some(px(200.)),
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Image",
@ -212,8 +205,7 @@ impl StoryWorkspace {
None,
true,
cx,
)
.detach();
);
// StoryContainer::add_panel(
// WebViewStory::view(cx).into(),
@ -232,8 +224,7 @@ impl StoryWorkspace {
None,
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Progress",
@ -244,8 +235,7 @@ impl StoryWorkspace {
Some(px(200.)),
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Resizable",
@ -256,8 +246,7 @@ impl StoryWorkspace {
None,
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Scrollable",
@ -268,8 +257,7 @@ impl StoryWorkspace {
None,
true,
cx,
)
.detach();
);
StoryContainer::add_panel(
"Calendar",
@ -280,8 +268,7 @@ impl StoryWorkspace {
None,
true,
cx,
)
.detach();
);
let locale_selector = cx.new_view(LocaleSelector::new);

View file

@ -125,22 +125,19 @@ impl StoryContainer {
size: Option<Pixels>,
closeable: bool,
cx: &mut WindowContext,
) -> Task<Result<View<Self>>> {
) {
let name = name.into();
let description = description.into();
cx.spawn(|mut cx| async move {
tab_panel.update(&mut cx, |panel, cx| {
let view =
cx.new_view(|cx| Self::new(name, description, closeable, cx).story(story));
if let Some(placement) = placement {
panel.add_panel_at(Arc::new(view.clone()), placement, size, cx);
} else {
panel.add_panel(Arc::new(view.clone()), cx);
}
view
})
})
tab_panel.update(cx, |panel, cx| {
let view = cx.new_view(|cx| Self::new(name, description, closeable, cx).story(story));
if let Some(placement) = placement {
panel.add_panel_at(Arc::new(view.clone()), placement, size, cx);
} else {
panel.add_panel(Arc::new(view.clone()), cx);
}
view
});
}
pub fn width(mut self, width: gpui::Pixels) -> Self {

View file

@ -129,7 +129,14 @@ impl TabPanel {
cx: &mut ViewContext<Self>,
) {
self.will_split_placement = Some(placement);
self.split_panel(panel, placement, size, cx);
cx.spawn(|view, mut cx| async move {
cx.update(|cx| {
view.update(cx, |view, cx| view.split_panel(panel, placement, size, cx))
.ok()
})
.ok()
})
.detach();
cx.notify();
}