From ae57178f3e710b82f61048b05b9fd343d2fd13e5 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 7 Apr 2021 15:04:08 -0700 Subject: [PATCH] Restructure event-handling methods in workspace ItemView --- zed/src/editor/buffer_view.rs | 30 +++++++---------------------- zed/src/workspace/workspace_view.rs | 27 +++++++++++++------------- 2 files changed, 20 insertions(+), 37 deletions(-) diff --git a/zed/src/editor/buffer_view.rs b/zed/src/editor/buffer_view.rs index 1c5a07dca7..6f3d6f108e 100644 --- a/zed/src/editor/buffer_view.rs +++ b/zed/src/editor/buffer_view.rs @@ -2,11 +2,7 @@ use super::{ buffer, movement, Anchor, Bias, Buffer, BufferElement, DisplayMap, DisplayPoint, Point, ToOffset, ToPoint, }; -use crate::{ - settings::Settings, - watch, - workspace::{self, ItemViewEvent}, -}; +use crate::{settings::Settings, watch, workspace}; use anyhow::Result; use futures_core::future::LocalBoxFuture; use gpui::{ @@ -86,18 +82,6 @@ pub enum SelectAction { End, } -// impl workspace::Item for Buffer { -// type View = BufferView; - -// fn build_view( -// buffer: ModelHandle, -// settings: watch::Receiver, -// ctx: &mut ViewContext, -// ) -> Self::View { -// BufferView::for_buffer(buffer, settings, ctx) -// } -// } - pub struct BufferView { handle: WeakViewHandle, buffer: ModelHandle, @@ -1155,12 +1139,12 @@ impl workspace::Item for Buffer { } impl workspace::ItemView for BufferView { - fn to_workspace_event(event: &Self::Event) -> Option { - match event { - Event::Activate => Some(ItemViewEvent::Activated), - Event::Dirtied | Event::Saved => Some(ItemViewEvent::TabStateChanged), - _ => None, - } + fn should_activate_item_on_event(event: &Self::Event) -> bool { + matches!(event, Event::Activate) + } + + fn should_update_tab_on_event(event: &Self::Event) -> bool { + matches!(event, Event::Saved | Event::Dirtied) } fn title(&self, app: &AppContext) -> std::string::String { diff --git a/zed/src/workspace/workspace_view.rs b/zed/src/workspace/workspace_view.rs index 5f7222f292..46cbdb0f28 100644 --- a/zed/src/workspace/workspace_view.rs +++ b/zed/src/workspace/workspace_view.rs @@ -13,13 +13,7 @@ pub fn init(app: &mut App) { app.add_bindings(vec![Binding::new("cmd-s", "workspace:save", None)]); } -pub enum ItemViewEvent { - TabStateChanged, - Activated, -} - pub trait ItemView: View { - fn to_workspace_event(event: &Self::Event) -> Option; fn title(&self, app: &AppContext) -> String; fn entry_id(&self, app: &AppContext) -> Option<(usize, usize)>; fn clone_on_split(&self, _: &mut ViewContext) -> Option @@ -34,6 +28,12 @@ pub trait ItemView: View { fn save(&self, _: &mut ViewContext) -> LocalBoxFuture<'static, anyhow::Result<()>> { Box::pin(async { Ok(()) }) } + fn should_activate_item_on_event(_: &Self::Event) -> bool { + false + } + fn should_update_tab_on_event(_: &Self::Event) -> bool { + false + } } pub trait ItemViewHandle: Send + Sync { @@ -71,15 +71,14 @@ impl ItemViewHandle for ViewHandle { fn set_parent_pane(&self, pane: &ViewHandle, app: &mut MutableAppContext) { pane.update(app, |_, ctx| { ctx.subscribe_to_view(self, |pane, item, event, ctx| { - match T::to_workspace_event(event) { - Some(ItemViewEvent::Activated) => { - if let Some(ix) = pane.item_index(&item) { - pane.activate_item(ix, ctx); - pane.activate(ctx); - } + if T::should_activate_item_on_event(event) { + if let Some(ix) = pane.item_index(&item) { + pane.activate_item(ix, ctx); + pane.activate(ctx); } - Some(ItemViewEvent::TabStateChanged) => ctx.notify(), - _ => {} + } + if T::should_update_tab_on_event(event) { + ctx.notify() } }) })