Detailed changes
@@ -111,6 +111,11 @@ impl TestAppContext {
self.fn_name
}
+ /// Checks whether there have been any new path prompts received by the platform.
+ pub fn did_prompt_for_new_path(&self) -> bool {
+ self.test_platform.did_prompt_for_new_path()
+ }
+
/// returns a new `TestAppContext` re-using the same executors to interleave tasks.
pub fn new_app(&self) -> TestAppContext {
Self::new(self.dispatcher.clone(), self.fn_name)
@@ -102,6 +102,10 @@ impl TestPlatform {
})
.detach();
}
+
+ pub(crate) fn did_prompt_for_new_path(&self) -> bool {
+ self.prompts.borrow().new_path.len() > 0
+ }
}
impl Platform for TestPlatform {
@@ -1474,9 +1474,7 @@ impl<'a> WindowContext<'a> {
InputEvent::MouseUp(mouse_up)
}
InputEvent::MouseExited(mouse_exited) => {
- // todo!("Should we record that the mouse is outside of the window somehow? Or are these global pixels?")
self.window.modifiers = mouse_exited.modifiers;
-
InputEvent::MouseExited(mouse_exited)
}
InputEvent::ModifiersChanged(modifiers_changed) => {
@@ -1,7 +1,7 @@
use std::{sync::Arc, time::Duration};
use futures::StreamExt;
-use gpui::{actions, KeyBinding};
+use gpui::{actions, KeyBinding, Menu, MenuItem};
use live_kit_client::{
LocalAudioTrack, LocalVideoTrack, RemoteAudioTrackUpdate, RemoteVideoTrackUpdate, Room,
};
@@ -26,15 +26,14 @@ fn main() {
cx.on_action(quit);
cx.bind_keys([KeyBinding::new("cmd-q", Quit, None)]);
- // todo!()
- // cx.set_menus(vec![Menu {
- // name: "Zed",
- // items: vec![MenuItem::Action {
- // name: "Quit",
- // action: Box::new(Quit),
- // os_action: None,
- // }],
- // }]);
+ cx.set_menus(vec![Menu {
+ name: "Zed",
+ items: vec![MenuItem::Action {
+ name: "Quit",
+ action: Box::new(Quit),
+ os_action: None,
+ }],
+ }]);
let live_kit_url = std::env::var("LIVE_KIT_URL").unwrap_or("http://localhost:7880".into());
let live_kit_key = std::env::var("LIVE_KIT_KEY").unwrap_or("devkey".into());
@@ -242,7 +242,6 @@ impl PickerDelegate for ProjectSymbolsDelegate {
.spacing(ListItemSpacing::Sparse)
.selected(selected)
.child(
- // todo!() combine_syntax_and_fuzzy_match_highlights()
v_stack()
.child(
LabelLike::new().child(
@@ -424,7 +424,6 @@ impl TerminalElement {
let line_height = font_pixels * line_height.to_pixels(rem_size);
let font_id = cx.text_system().resolve_font(&text_style.font());
- // todo!(do we need to keep this unwrap?)
let cell_width = text_system
.advance(font_id, font_pixels, 'm')
.unwrap()
@@ -524,7 +523,6 @@ impl TerminalElement {
underline: Default::default(),
}],
)
- //todo!(do we need to keep this unwrap?)
.unwrap()
};
@@ -664,21 +662,6 @@ impl TerminalElement {
},
),
);
- self.interactivity.on_click({
- let terminal = terminal.clone();
- move |e, cx| {
- if e.down.button == MouseButton::Right {
- let mouse_mode = terminal.update(cx, |terminal, _cx| {
- terminal.mouse_mode(e.down.modifiers.shift)
- });
-
- if !mouse_mode {
- //todo!(context menu)
- // view.deploy_context_menu(e.position, cx);
- }
- }
- }
- });
self.interactivity.on_scroll_wheel({
let terminal = terminal.clone();
move |e, cx| {
@@ -651,8 +651,10 @@ impl Render for TerminalView {
.on_mouse_down(
MouseButton::Right,
cx.listener(|this, event: &MouseDownEvent, cx| {
- this.deploy_context_menu(event.position, cx);
- cx.notify();
+ if !this.terminal.read(cx).mouse_mode(event.modifiers.shift) {
+ this.deploy_context_menu(event.position, cx);
+ cx.notify();
+ }
}),
)
.child(
@@ -222,6 +222,7 @@ pub struct ThemeStyles {
#[refineable]
pub status: StatusColors,
+
pub player: PlayerColors,
pub syntax: Arc<SyntaxTheme>,
}
@@ -122,12 +122,10 @@ impl PlayerColors {
impl PlayerColors {
pub fn local(&self) -> PlayerColor {
- // todo!("use a valid color");
*self.0.first().unwrap()
}
pub fn absent(&self) -> PlayerColor {
- // todo!("use a valid color");
*self.0.last().unwrap()
}
@@ -6,7 +6,7 @@ use editor::test::{
use futures::Future;
use gpui::{Context, View, VisualContext};
use lsp::request;
-use search::BufferSearchBar;
+use search::{project_search::ProjectSearchBar, BufferSearchBar};
use crate::{state::Operator, *};
@@ -59,9 +59,9 @@ impl VimTestContext {
pane.toolbar().update(cx, |toolbar, cx| {
let buffer_search_bar = cx.new_view(BufferSearchBar::new);
toolbar.add_item(buffer_search_bar, cx);
- // todo!();
- // let project_search_bar = cx.add_view(|_| ProjectSearchBar::new());
- // toolbar.add_item(project_search_bar, cx);
+
+ let project_search_bar = cx.new_view(|_| ProjectSearchBar::new());
+ toolbar.add_item(project_search_bar, cx);
})
});
workspace.status_bar().update(cx, |status_bar, cx| {
@@ -167,15 +167,6 @@ impl DockPosition {
}
}
- // todo!()
- // fn to_resize_handle_side(self) -> HandleSide {
- // match self {
- // Self::Left => HandleSide::Right,
- // Self::Bottom => HandleSide::Top,
- // Self::Right => HandleSide::Left,
- // }
- // }
-
pub fn axis(&self) -> Axis {
match self {
Self::Left | Self::Right => Axis::Horizontal,
@@ -186,8 +177,6 @@ impl DockPosition {
struct PanelEntry {
panel: Arc<dyn PanelHandle>,
- // todo!()
- // context_menu: View<ContextMenu>,
_subscriptions: [Subscription; 2],
}
@@ -265,12 +254,6 @@ impl Dock {
self.is_open
}
- // todo!()
- // pub fn has_focus(&self, cx: &WindowContext) -> bool {
- // self.visible_panel()
- // .map_or(false, |panel| panel.has_focus(cx))
- // }
-
pub fn panel<T: Panel>(&self) -> Option<View<T>> {
self.panel_entries
.iter()
@@ -417,16 +400,8 @@ impl Dock {
}),
];
- // todo!()
- // let dock_view_id = cx.view_id();
self.panel_entries.push(PanelEntry {
panel: Arc::new(panel),
- // todo!()
- // context_menu: cx.add_view(|cx| {
- // let mut menu = ContextMenu::new(dock_view_id, cx);
- // menu.set_position_mode(OverlayPositionMode::Local);
- // menu
- // }),
_subscriptions: subscriptions,
});
cx.notify()
@@ -618,7 +593,6 @@ impl PanelButtons {
impl Render for PanelButtons {
fn render(&mut self, cx: &mut ViewContext<Self>) -> impl IntoElement {
- // todo!()
let dock = self.dock.read(cx);
let active_index = dock.active_panel_index;
let is_open = dock.is_open;
@@ -8,8 +8,6 @@ use std::{any::TypeId, ops::DerefMut};
pub fn init(cx: &mut AppContext) {
cx.set_global(NotificationTracker::new());
- // todo!()
- // simple_message_notification::init(cx);
}
pub trait Notification: EventEmitter<DismissEvent> + Render {}
@@ -242,87 +242,6 @@ pub struct DraggedTab {
pub is_active: bool,
}
-// pub struct DraggedItem {
-// pub handle: Box<dyn ItemHandle>,
-// pub pane: WeakView<Pane>,
-// }
-
-// pub enum ReorderBehavior {
-// None,
-// MoveAfterActive,
-// MoveToIndex(usize),
-// }
-
-// #[derive(Debug, Clone, Copy, PartialEq, Eq)]
-// enum TabBarContextMenuKind {
-// New,
-// Split,
-// }
-
-// struct TabBarContextMenu {
-// kind: TabBarContextMenuKind,
-// handle: View<ContextMenu>,
-// }
-
-// impl TabBarContextMenu {
-// fn handle_if_kind(&self, kind: TabBarContextMenuKind) -> Option<View<ContextMenu>> {
-// if self.kind == kind {
-// return Some(self.handle.clone());
-// }
-// None
-// }
-// }
-
-// #[allow(clippy::too_many_arguments)]
-// fn nav_button<A: Action, F: 'static + Fn(&mut Pane, &mut ViewContext<Pane>)>(
-// svg_path: &'static str,
-// style: theme::Interactive<theme2::IconButton>,
-// nav_button_height: f32,
-// tooltip_style: TooltipStyle,
-// enabled: bool,
-// on_click: F,
-// tooltip_action: A,
-// action_name: &str,
-// cx: &mut ViewContext<Pane>,
-// ) -> AnyElement<Pane> {
-// MouseEventHandler::new::<A, _>(0, cx, |state, _| {
-// let style = if enabled {
-// style.style_for(state)
-// } else {
-// style.disabled_style()
-// };
-// Svg::new(svg_path)
-// .with_color(style.color)
-// .constrained()
-// .with_width(style.icon_width)
-// .aligned()
-// .contained()
-// .with_style(style.container)
-// .constrained()
-// .with_width(style.button_width)
-// .with_height(nav_button_height)
-// .aligned()
-// .top()
-// })
-// .with_cursor_style(if enabled {
-// CursorStyle::PointingHand
-// } else {
-// CursorStyle::default()
-// })
-// .on_click(MouseButton::Left, move |_, toolbar, cx| {
-// on_click(toolbar, cx)
-// })
-// .with_tooltip::<A>(
-// 0,
-// action_name.to_string(),
-// Some(Box::new(tooltip_action)),
-// tooltip_style,
-// cx,
-// )
-// .contained()
-// .into_any_named("nav button")
-// }
-
impl EventEmitter<Event> for Pane {}
impl Pane {
@@ -333,13 +252,6 @@ impl Pane {
can_drop_predicate: Option<Arc<dyn Fn(&dyn Any, &mut WindowContext) -> bool + 'static>>,
cx: &mut ViewContext<Self>,
) -> Self {
- // todo!("context menu")
- // let pane_view_id = cx.view_id();
- // let context_menu = cx.build_view(|cx| ContextMenu::new(pane_view_id, cx));
- // context_menu.update(cx, |menu, _| {
- // menu.set_position_mode(OverlayPositionMode::Local)
- // });
- //
let focus_handle = cx.focus_handle();
let subscriptions = vec![
@@ -370,11 +282,6 @@ impl Pane {
split_item_menu: None,
tab_bar_scroll_handle: ScrollHandle::new(),
drag_split_direction: None,
- // tab_bar_context_menu: TabBarContextMenu {
- // kind: TabBarContextMenuKind::New,
- // handle: context_menu,
- // },
- // tab_context_menu: cx.build_view(|_| ContextMenu::new(pane_view_id, cx)),
workspace,
project,
can_drop_predicate,
@@ -450,7 +357,6 @@ impl Pane {
}
pub fn has_focus(&self, cx: &WindowContext) -> bool {
- // todo!(); // inline this manually
self.focus_handle.contains_focused(cx)
}
@@ -1,8 +1,8 @@
use std::{any::Any, sync::Arc};
use gpui::{
- AnyView, AppContext, EventEmitter, Subscription, Task, View, ViewContext, WeakView,
- WindowContext,
+ AnyView, AnyWeakView, AppContext, EventEmitter, Subscription, Task, View, ViewContext,
+ WeakView, WindowContext,
};
use project::search::SearchQuery;
@@ -127,7 +127,6 @@ pub trait SearchableItemHandle: ItemHandle {
) -> Option<usize>;
}
-// todo!("here is where we need to use AnyWeakView");
impl<T: SearchableItem> SearchableItemHandle for View<T> {
fn downgrade(&self) -> Box<dyn WeakSearchableItemHandle> {
Box::new(self.downgrade())
@@ -249,7 +248,7 @@ impl Eq for Box<dyn SearchableItemHandle> {}
pub trait WeakSearchableItemHandle: WeakItemHandle {
fn upgrade(&self, cx: &AppContext) -> Option<Box<dyn SearchableItemHandle>>;
- // fn into_any(self) -> AnyWeakView;
+ fn into_any(self) -> AnyWeakView;
}
impl<T: SearchableItem> WeakSearchableItemHandle for WeakView<T> {
@@ -257,9 +256,9 @@ impl<T: SearchableItem> WeakSearchableItemHandle for WeakView<T> {
Some(Box::new(self.upgrade()?))
}
- // fn into_any(self) -> AnyView {
- // self.into_any()
- // }
+ fn into_any(self) -> AnyWeakView {
+ self.into()
+ }
}
impl PartialEq for Box<dyn WeakSearchableItemHandle> {
@@ -1143,7 +1143,6 @@ impl Workspace {
quitting: bool,
cx: &mut ViewContext<Self>,
) -> Task<Result<bool>> {
- //todo!(saveing)
let active_call = self.active_call().cloned();
let window = cx.window_handle();
@@ -1694,28 +1693,6 @@ impl Workspace {
None
}
- // todo!("implement zoom")
- #[allow(unused)]
- fn zoom_out(&mut self, cx: &mut ViewContext<Self>) {
- for pane in &self.panes {
- pane.update(cx, |pane, cx| pane.set_zoomed(false, cx));
- }
-
- self.left_dock.update(cx, |dock, cx| dock.zoom_out(cx));
- self.bottom_dock.update(cx, |dock, cx| dock.zoom_out(cx));
- self.right_dock.update(cx, |dock, cx| dock.zoom_out(cx));
- self.zoomed = None;
- self.zoomed_position = None;
-
- cx.notify();
- }
-
- // todo!()
- // #[cfg(any(test, feature = "test-support"))]
- // pub fn zoomed_view(&self, cx: &AppContext) -> Option<AnyViewHandle> {
- // self.zoomed.and_then(|view| view.upgrade(cx))
- // }
-
fn dismiss_zoomed_items_to_reveal(
&mut self,
dock_to_reveal: Option<DockPosition>,
@@ -23,7 +23,7 @@ use quick_action_bar::QuickActionBar;
use search::project_search::ProjectSearchBar;
use settings::{initial_local_settings_content, KeymapFile, Settings, SettingsStore};
use std::{borrow::Cow, ops::Deref, sync::Arc};
-use terminal_view::terminal_panel::TerminalPanel;
+use terminal_view::terminal_panel::{self, TerminalPanel};
use util::{
asset_str,
channel::{AppCommitSha, ReleaseChannel},
@@ -299,79 +299,42 @@ pub fn initialize_workspace(app_state: Arc<AppState>, cx: &mut AppContext) {
);
},
)
- //todo!()
- // cx.add_action({
- // move |workspace: &mut Workspace, _: &DebugElements, cx: &mut ViewContext<Workspace>| {
- // let app_state = workspace.app_state().clone();
- // let markdown = app_state.languages.language_for_name("JSON");
- // let window = cx.window();
- // cx.spawn(|workspace, mut cx| async move {
- // let markdown = markdown.await.log_err();
- // let content = to_string_pretty(&window.debug_elements(&cx).ok_or_else(|| {
- // anyhow!("could not debug elements for window {}", window.id())
- // })?)
- // .unwrap();
- // workspace
- // .update(&mut cx, |workspace, cx| {
- // workspace.with_local_workspace(cx, move |workspace, cx| {
- // let project = workspace.project().clone();
- // let buffer = project
- // .update(cx, |project, cx| {
- // project.create_buffer(&content, markdown, cx)
- // })
- // .expect("creating buffers on a local workspace always succeeds");
- // let buffer = cx.add_model(|cx| {
- // MultiBuffer::singleton(buffer, cx)
- // .with_title("Debug Elements".into())
- // });
- // workspace.add_item(
- // Box::new(cx.add_view(|cx| {
- // Editor::for_multibuffer(buffer, Some(project.clone()), cx)
- // })),
- // cx,
- // );
- // })
- // })?
- // .await
- // })
- // .detach_and_log_err(cx);
- // }
- // });
- // .register_action(
- // |workspace: &mut Workspace,
- // _: &project_panel::ToggleFocus,
- // cx: &mut ViewContext<Workspace>| {
- // workspace.toggle_panel_focus::<ProjectPanel>(cx);
- // },
- // );
- // cx.add_action(
- // |workspace: &mut Workspace,
- // _: &collab_ui::collab_panel::ToggleFocus,
- // cx: &mut ViewContext<Workspace>| {
- // workspace.toggle_panel_focus::<collab_ui::collab_panel::CollabPanel>(cx);
- // },
- // );
- // cx.add_action(
- // |workspace: &mut Workspace,
- // _: &collab_ui::chat_panel::ToggleFocus,
- // cx: &mut ViewContext<Workspace>| {
- // workspace.toggle_panel_focus::<collab_ui::chat_panel::ChatPanel>(cx);
- // },
- // );
- // cx.add_action(
- // |workspace: &mut Workspace,
- // _: &collab_ui::notification_panel::ToggleFocus,
- // cx: &mut ViewContext<Workspace>| {
- // workspace.toggle_panel_focus::<collab_ui::notification_panel::NotificationPanel>(cx);
- // },
- // );
- // cx.add_action(
- // |workspace: &mut Workspace,
- // _: &terminal_panel::ToggleFocus,
- // cx: &mut ViewContext<Workspace>| {
- // workspace.toggle_panel_focus::<TerminalPanel>(cx);
- // },
- // );
+ .register_action(
+ |workspace: &mut Workspace,
+ _: &project_panel::ToggleFocus,
+ cx: &mut ViewContext<Workspace>| {
+ workspace.toggle_panel_focus::<ProjectPanel>(cx);
+ },
+ )
+ .register_action(
+ |workspace: &mut Workspace,
+ _: &collab_ui::collab_panel::ToggleFocus,
+ cx: &mut ViewContext<Workspace>| {
+ workspace.toggle_panel_focus::<collab_ui::collab_panel::CollabPanel>(cx);
+ },
+ )
+ .register_action(
+ |workspace: &mut Workspace,
+ _: &collab_ui::chat_panel::ToggleFocus,
+ cx: &mut ViewContext<Workspace>| {
+ workspace.toggle_panel_focus::<collab_ui::chat_panel::ChatPanel>(cx);
+ },
+ )
+ .register_action(
+ |workspace: &mut Workspace,
+ _: &collab_ui::notification_panel::ToggleFocus,
+ cx: &mut ViewContext<Workspace>| {
+ workspace
+ .toggle_panel_focus::<collab_ui::notification_panel::NotificationPanel>(cx);
+ },
+ )
+ .register_action(
+ |workspace: &mut Workspace,
+ _: &terminal_panel::ToggleFocus,
+ cx: &mut ViewContext<Workspace>| {
+ workspace.toggle_panel_focus::<TerminalPanel>(cx);
+ },
+ )
.register_action({
let app_state = Arc::downgrade(&app_state);
move |_, _: &NewWindow, cx| {
@@ -1658,8 +1621,8 @@ mod tests {
})
.unwrap();
save_task.await.unwrap();
- // todo!() po
- //assert!(!cx.did_prompt_for_new_path());
+
+ assert!(!cx.did_prompt_for_new_path());
window
.update(cx, |_, cx| {
editor.update(cx, |editor, cx| {
@@ -132,7 +132,7 @@ else
cp -R target/${target_dir}/WebRTC.framework "${app_path}/Contents/Frameworks/"
fi
-#todo!(The app identifier has been set to 'Dev', but the channel is nightly, RATIONALIZE ALL OF THIS MESS)
+# Note: The app identifier for our development builds is the same as the app identifier for nightly.
cp crates/${zed_crate}/contents/$channel/embedded.provisionprofile "${app_path}/Contents/"
if [[ -n $MACOS_CERTIFICATE && -n $MACOS_CERTIFICATE_PASSWORD && -n $APPLE_NOTARIZATION_USERNAME && -n $APPLE_NOTARIZATION_PASSWORD ]]; then