diff --git a/crates/workspace2/src/dock.rs b/crates/workspace2/src/dock.rs index e8840fb172506084634ac52e118cbe7349699fac..b656a79a8d32860993b5b65287cb318e30659104 100644 --- a/crates/workspace2/src/dock.rs +++ b/crates/workspace2/src/dock.rs @@ -346,6 +346,7 @@ impl Dock { }) .ok(); } + // todo!() we do not use this event in the production code (even in zed1), remove it PanelEvent::Activate => { if let Some(ix) = this .panel_entries diff --git a/crates/workspace2/src/pane.rs b/crates/workspace2/src/pane.rs index 5c5801960e335e2efe1ff4fa59e8e2dcdd08a496..1d1f6b6b55faf1d9fd1e5f47c662838a1682c7ae 100644 --- a/crates/workspace2/src/pane.rs +++ b/crates/workspace2/src/pane.rs @@ -10,7 +10,7 @@ use gpui::{ actions, impl_actions, overlay, prelude::*, rems, Action, AnchorCorner, AnyWeakView, AppContext, AsyncWindowContext, DismissEvent, Div, EntityId, EventEmitter, FocusHandle, Focusable, FocusableView, Model, MouseButton, NavigationDirection, Pixels, Point, PromptLevel, - Render, Task, View, ViewContext, VisualContext, WeakView, WindowContext, + Render, Subscription, Task, View, ViewContext, VisualContext, WeakView, WindowContext, }; use parking_lot::Mutex; use project::{Project, ProjectEntryId, ProjectPath}; @@ -174,6 +174,7 @@ pub struct Pane { // can_drop: Rc, &WindowContext) -> bool>, can_split: bool, // render_tab_bar_buttons: Rc) -> AnyElement>, + subscriptions: Vec, } pub struct ItemNavHistory { @@ -312,10 +313,17 @@ impl Pane { // context_menu.update(cx, |menu, _| { // menu.set_position_mode(OverlayPositionMode::Local) // }); + // + let focus_handle = cx.focus_handle(); + + let subscriptions = vec![ + cx.on_focus_in(&focus_handle, move |this, cx| this.focus_in(cx)), + cx.on_focus_out(&focus_handle, move |this, cx| this.focus_out(cx)), + ]; let handle = cx.view().downgrade(); Self { - focus_handle: cx.focus_handle(), + focus_handle, items: Vec::new(), activation_history: Vec::new(), was_focused: false, @@ -402,6 +410,7 @@ impl Pane { // }) // .into_any() // }), + subscriptions, } } @@ -2062,18 +2071,6 @@ impl Render for Pane { .track_focus(&self.focus_handle) .size_full() .overflow_hidden() - .on_focus_in({ - let this = this.clone(); - move |event, cx| { - this.update(cx, |this, cx| this.focus_in(cx)).ok(); - } - }) - .on_focus_out({ - let this = this.clone(); - move |event, cx| { - this.update(cx, |this, cx| this.focus_out(cx)).ok(); - } - }) .on_action(cx.listener(|pane, _: &SplitLeft, cx| pane.split(SplitDirection::Left, cx))) .on_action(cx.listener(|pane, _: &SplitUp, cx| pane.split(SplitDirection::Up, cx))) .on_action( diff --git a/crates/workspace2/src/workspace2.rs b/crates/workspace2/src/workspace2.rs index 43aa13847d937540dbd7c16658de347abb0521b5..a352b0a67afcd9b10051f6e625ad9e5a19249cc8 100644 --- a/crates/workspace2/src/workspace2.rs +++ b/crates/workspace2/src/workspace2.rs @@ -1633,6 +1633,7 @@ impl Workspace { panel.focus_handle(cx).focus(cx); reveal_dock = true; } else { + // todo!() // if panel.is_zoomed(cx) { // dock.set_open(false, cx); // }