From b6374313b20920ceb368fabd9ad26ae4d0c25d3a Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Fri, 6 Sep 2024 18:04:26 +0800 Subject: [PATCH] Fix DockItem::tabs, the items should use trait object to support difference type. --- crates/app/src/story_workspace.rs | 28 ++++++++++++++-------------- crates/ui/src/dock/mod.rs | 5 ++--- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/crates/app/src/story_workspace.rs b/crates/app/src/story_workspace.rs index cf8f25db..246e9c69 100644 --- a/crates/app/src/story_workspace.rs +++ b/crates/app/src/story_workspace.rs @@ -70,18 +70,18 @@ impl StoryWorkspace { vec![ DockItem::tabs( vec![ - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), ], None, &dock_area, @@ -89,8 +89,8 @@ impl StoryWorkspace { ), DockItem::tabs( vec![ - StoryContainer::panel::(cx), - StoryContainer::panel::(cx), + Arc::new(StoryContainer::panel::(cx)), + Arc::new(StoryContainer::panel::(cx)), ], None, &dock_area, diff --git a/crates/ui/src/dock/mod.rs b/crates/ui/src/dock/mod.rs index 477f62ec..0a185b18 100644 --- a/crates/ui/src/dock/mod.rs +++ b/crates/ui/src/dock/mod.rs @@ -89,15 +89,14 @@ impl DockItem { /// Create DockItem with tabs layout, items are displayed as tabs. /// /// The `active_ix` is the index of the active tab, if `None` the first tab is active. - pub fn tabs( - items: Vec>, + pub fn tabs( + items: Vec>, active_ix: Option, dock_area: &View, cx: &mut WindowContext, ) -> Self { let mut new_items: Vec> = vec![]; for item in items.into_iter() { - let item: Arc = Arc::new(item); new_items.push(item) } Self::new_tabs(new_items, active_ix, dock_area, cx)