From e9ed40da376b2d8856ea1eba43625f5b29cd8183 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 3 May 2023 16:52:55 +0200 Subject: [PATCH] Remove the ability to retrieve the view's parent --- crates/collab_ui/src/collab_titlebar_item.rs | 3 ++- crates/context_menu/src/context_menu.rs | 14 ++++++-------- crates/copilot_button/src/copilot_button.rs | 3 ++- crates/editor/src/editor.rs | 4 +++- crates/gpui/src/app.rs | 4 ---- crates/gpui/src/app/window.rs | 10 ---------- crates/project_panel/src/project_panel.rs | 3 ++- crates/terminal_view/src/terminal_button.rs | 3 ++- crates/terminal_view/src/terminal_view.rs | 3 ++- crates/workspace/src/pane.rs | 5 +++-- 10 files changed, 22 insertions(+), 30 deletions(-) diff --git a/crates/collab_ui/src/collab_titlebar_item.rs b/crates/collab_ui/src/collab_titlebar_item.rs index 0942c47910856a8c09102e7bfe7f2cf49b3518c4..69ca64360cbe5363f6ea9811eb8f43f6f1c63a97 100644 --- a/crates/collab_ui/src/collab_titlebar_item.rs +++ b/crates/collab_ui/src/collab_titlebar_item.rs @@ -165,6 +165,7 @@ impl CollabTitlebarItem { }), ); + let view_id = cx.view_id(); Self { workspace: workspace.weak_handle(), project, @@ -172,7 +173,7 @@ impl CollabTitlebarItem { client, contacts_popover: None, user_menu: cx.add_view(|cx| { - let mut menu = ContextMenu::new(cx); + let mut menu = ContextMenu::new(view_id, cx); menu.set_position_mode(OverlayPositionMode::Local); menu }), diff --git a/crates/context_menu/src/context_menu.rs b/crates/context_menu/src/context_menu.rs index e0429bd01b6203ad2a75d7709b2d1f0c0c5e1e2e..1306661e7016d114d91cc8cfe3b715a6168a373e 100644 --- a/crates/context_menu/src/context_menu.rs +++ b/crates/context_menu/src/context_menu.rs @@ -127,7 +127,7 @@ pub struct ContextMenu { visible: bool, previously_focused_view_id: Option, clicked: bool, - parent_view_id: usize, + view_id: usize, _actions_observation: Subscription, } @@ -178,9 +178,7 @@ impl View for ContextMenu { } impl ContextMenu { - pub fn new(cx: &mut ViewContext) -> Self { - let parent_view_id = cx.parent().unwrap(); - + pub fn new(view_id: usize, cx: &mut ViewContext) -> Self { Self { show_count: 0, anchor_position: Default::default(), @@ -191,7 +189,7 @@ impl ContextMenu { visible: Default::default(), previously_focused_view_id: Default::default(), clicked: false, - parent_view_id, + view_id, _actions_observation: cx.observe_actions(Self::action_dispatched), } } @@ -227,7 +225,7 @@ impl ContextMenu { match action { ContextMenuItemAction::Action(action) => { let window_id = cx.window_id(); - let view_id = self.parent_view_id; + let view_id = self.view_id; let action = action.boxed_clone(); cx.app_context() .spawn(|mut cx| async move { @@ -381,7 +379,7 @@ impl ContextMenu { match action { ContextMenuItemAction::Action(action) => KeystrokeLabel::new( - self.parent_view_id, + self.view_id, action.boxed_clone(), style.keystroke.container, style.keystroke.text.clone(), @@ -421,7 +419,7 @@ impl ContextMenu { match item { ContextMenuItem::Item { label, action } => { let action = action.clone(); - let view_id = self.parent_view_id; + let view_id = self.view_id; MouseEventHandler::::new(ix, cx, |state, _| { let style = style.item.style_for(state, Some(ix) == self.selected_index); diff --git a/crates/copilot_button/src/copilot_button.rs b/crates/copilot_button/src/copilot_button.rs index 832bdaf3dae071f03f87721a8f3245982ec47230..dbdf75121cdc92199e9772fcf39191ce2bb4a877 100644 --- a/crates/copilot_button/src/copilot_button.rs +++ b/crates/copilot_button/src/copilot_button.rs @@ -142,8 +142,9 @@ impl View for CopilotButton { impl CopilotButton { pub fn new(cx: &mut ViewContext) -> Self { + let button_view_id = cx.view_id(); let menu = cx.add_view(|cx| { - let mut menu = ContextMenu::new(cx); + let mut menu = ContextMenu::new(button_view_id, cx); menu.set_position_mode(OverlayPositionMode::Local); menu }); diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index df2ca6f43d8b67d9e206cdbfaf8eb817ac89725d..8e3d9dba921acc7a2183387357aa6df94524d301 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -1227,6 +1227,7 @@ impl Editor { get_field_editor_theme: Option>, cx: &mut ViewContext, ) -> Self { + let editor_view_id = cx.view_id(); let display_map = cx.add_model(|cx| { let settings = cx.global::(); let style = build_style(&*settings, get_field_editor_theme.as_deref(), None, cx); @@ -1274,7 +1275,8 @@ impl Editor { background_highlights: Default::default(), nav_history: None, context_menu: None, - mouse_context_menu: cx.add_view(context_menu::ContextMenu::new), + mouse_context_menu: cx + .add_view(|cx| context_menu::ContextMenu::new(editor_view_id, cx)), completion_tasks: Default::default(), next_completion_id: 0, available_code_actions: Default::default(), diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 32ac815232da75181b4787e10d0d7e3155db19dd..5b8b6e5e04fe7291d8cf9a67e471e9a756110fa5 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -2767,10 +2767,6 @@ impl<'a, 'b, V: View> ViewContext<'a, 'b, V> { WeakViewHandle::new(self.window_id, self.view_id) } - pub fn parent(&self) -> Option { - self.window_context.parent(self.view_id) - } - pub fn window_id(&self) -> usize { self.window_id } diff --git a/crates/gpui/src/app/window.rs b/crates/gpui/src/app/window.rs index 3d04b46e06094a55bb66c1feaafda4fd22961736..1b9464ddeb1747d79c25c5d28207ce5a73cfe8c2 100644 --- a/crates/gpui/src/app/window.rs +++ b/crates/gpui/src/app/window.rs @@ -1073,16 +1073,6 @@ impl<'a> WindowContext<'a> { })) } - /// Returns the id of the parent of the given view, or none if the given - /// view is the root. - pub(crate) fn parent(&self, view_id: usize) -> Option { - if let Some(view_id) = self.window.parents.get(&view_id) { - Some(*view_id) - } else { - None - } - } - // Traverses the parent tree. Walks down the tree toward the passed // view calling visit with true. Then walks back up the tree calling visit with false. // If `visit` returns false this function will immediately return. diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index 373417b167047ac80cd2d04aa8d7eb22068fa1df..4386626e72718e7715f61ce609d06a779893aede 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -196,6 +196,7 @@ impl ProjectPanel { }) .detach(); + let view_id = cx.view_id(); let mut this = Self { project: project.clone(), list: Default::default(), @@ -206,7 +207,7 @@ impl ProjectPanel { edit_state: None, filename_editor, clipboard_entry: None, - context_menu: cx.add_view(ContextMenu::new), + context_menu: cx.add_view(|cx| ContextMenu::new(view_id, cx)), dragged_entry_destination: None, workspace: workspace.weak_handle(), }; diff --git a/crates/terminal_view/src/terminal_button.rs b/crates/terminal_view/src/terminal_button.rs index 8edf03f527321551d8a1047e38abfe1023e6d9f8..a92f7285b51d4bad489af8ef929cb8a88ef91074 100644 --- a/crates/terminal_view/src/terminal_button.rs +++ b/crates/terminal_view/src/terminal_button.rs @@ -107,11 +107,12 @@ impl View for TerminalButton { impl TerminalButton { pub fn new(workspace: ViewHandle, cx: &mut ViewContext) -> Self { + let button_view_id = cx.view_id(); cx.observe(&workspace, |_, _, cx| cx.notify()).detach(); Self { workspace: workspace.downgrade(), popup_menu: cx.add_view(|cx| { - let mut menu = ContextMenu::new(cx); + let mut menu = ContextMenu::new(button_view_id, cx); menu.set_position_mode(OverlayPositionMode::Local); menu }), diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index a40cb4508d7218b87c0bbd81c963caf243d48e93..fd6c7fae1b435dc5d631524cc97832b7d1042534 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -124,6 +124,7 @@ impl TerminalView { workspace_id: WorkspaceId, cx: &mut ViewContext, ) -> Self { + let view_id = cx.view_id(); cx.observe(&terminal, |_, _, cx| cx.notify()).detach(); cx.subscribe(&terminal, |this, _, event, cx| match event { Event::Wakeup => { @@ -162,7 +163,7 @@ impl TerminalView { terminal, has_new_content: true, has_bell: false, - context_menu: cx.add_view(ContextMenu::new), + context_menu: cx.add_view(|cx| ContextMenu::new(view_id, cx)), blink_state: true, blinking_on: false, blinking_paused: false, diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 8b0107d3688a24467ddde6969e0991bf34d0cc9b..6f7238d4a1950bda715f4eeeefdcfccc23232aae 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -226,8 +226,9 @@ impl Pane { background_actions: BackgroundActions, cx: &mut ViewContext, ) -> Self { + let pane_view_id = cx.view_id(); let handle = cx.weak_handle(); - let context_menu = cx.add_view(ContextMenu::new); + let context_menu = cx.add_view(|cx| ContextMenu::new(pane_view_id, cx)); context_menu.update(cx, |menu, _| { menu.set_position_mode(OverlayPositionMode::Local) }); @@ -252,7 +253,7 @@ impl Pane { kind: TabBarContextMenuKind::New, handle: context_menu, }, - tab_context_menu: cx.add_view(ContextMenu::new), + tab_context_menu: cx.add_view(|cx| ContextMenu::new(pane_view_id, cx)), docked, _background_actions: background_actions, workspace,