branches: Add a modal branch list.
Extract branch list into a separate vcs_menu crate akin to recent_projects. Add current bind for a modal branch to branch popover's tooltip. Z-2555
This commit is contained in:
parent
6739c31594
commit
e00e73f608
9 changed files with 71 additions and 11 deletions
14
Cargo.lock
generated
14
Cargo.lock
generated
|
@ -1491,6 +1491,7 @@ dependencies = [
|
||||||
"theme",
|
"theme",
|
||||||
"theme_selector",
|
"theme_selector",
|
||||||
"util",
|
"util",
|
||||||
|
"vcs_menu",
|
||||||
"workspace",
|
"workspace",
|
||||||
"zed-actions",
|
"zed-actions",
|
||||||
]
|
]
|
||||||
|
@ -8377,6 +8378,19 @@ version = "0.2.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vcs_menu"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"fuzzy",
|
||||||
|
"gpui",
|
||||||
|
"picker",
|
||||||
|
"theme",
|
||||||
|
"util",
|
||||||
|
"workspace",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "version_check"
|
name = "version_check"
|
||||||
version = "0.9.4"
|
version = "0.9.4"
|
||||||
|
|
|
@ -64,6 +64,7 @@ members = [
|
||||||
"crates/theme_selector",
|
"crates/theme_selector",
|
||||||
"crates/util",
|
"crates/util",
|
||||||
"crates/vim",
|
"crates/vim",
|
||||||
|
"crates/vcs_menu",
|
||||||
"crates/workspace",
|
"crates/workspace",
|
||||||
"crates/welcome",
|
"crates/welcome",
|
||||||
"crates/xtask",
|
"crates/xtask",
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
"cmd-shift-n": "workspace::NewWindow",
|
"cmd-shift-n": "workspace::NewWindow",
|
||||||
"cmd-o": "workspace::Open",
|
"cmd-o": "workspace::Open",
|
||||||
"alt-cmd-o": "projects::OpenRecent",
|
"alt-cmd-o": "projects::OpenRecent",
|
||||||
|
"alt-cmd-b": "branches::OpenRecent",
|
||||||
"ctrl-~": "workspace::NewTerminal",
|
"ctrl-~": "workspace::NewTerminal",
|
||||||
"ctrl-`": "terminal_panel::ToggleFocus",
|
"ctrl-`": "terminal_panel::ToggleFocus",
|
||||||
"shift-escape": "workspace::ToggleZoom"
|
"shift-escape": "workspace::ToggleZoom"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
{
|
{
|
||||||
"bindings": {
|
"bindings": {
|
||||||
"cmd-shift-o": "projects::OpenRecent",
|
"cmd-shift-o": "projects::OpenRecent",
|
||||||
|
"cmd-shift-b": "branches::OpenRecent",
|
||||||
"cmd-alt-tab": "project_panel::ToggleFocus"
|
"cmd-alt-tab": "project_panel::ToggleFocus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -39,6 +39,7 @@ recent_projects = {path = "../recent_projects"}
|
||||||
settings = { path = "../settings" }
|
settings = { path = "../settings" }
|
||||||
theme = { path = "../theme" }
|
theme = { path = "../theme" }
|
||||||
theme_selector = { path = "../theme_selector" }
|
theme_selector = { path = "../theme_selector" }
|
||||||
|
vcs_menu = { path = "../vcs_menu" }
|
||||||
util = { path = "../util" }
|
util = { path = "../util" }
|
||||||
workspace = { path = "../workspace" }
|
workspace = { path = "../workspace" }
|
||||||
zed-actions = {path = "../zed-actions"}
|
zed-actions = {path = "../zed-actions"}
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
branch_list::{build_branch_list, BranchList},
|
contact_notification::ContactNotification, contacts_popover, face_pile::FacePile,
|
||||||
contact_notification::ContactNotification,
|
|
||||||
contacts_popover,
|
|
||||||
face_pile::FacePile,
|
|
||||||
toggle_deafen, toggle_mute, toggle_screen_sharing, LeaveCall, ToggleDeafen, ToggleMute,
|
toggle_deafen, toggle_mute, toggle_screen_sharing, LeaveCall, ToggleDeafen, ToggleMute,
|
||||||
ToggleScreenSharing,
|
ToggleScreenSharing,
|
||||||
};
|
};
|
||||||
|
@ -27,6 +24,7 @@ use recent_projects::{build_recent_projects, RecentProjects};
|
||||||
use std::{ops::Range, sync::Arc};
|
use std::{ops::Range, sync::Arc};
|
||||||
use theme::{AvatarStyle, Theme};
|
use theme::{AvatarStyle, Theme};
|
||||||
use util::ResultExt;
|
use util::ResultExt;
|
||||||
|
use vcs_menu::{build_branch_list, BranchList, OpenRecent as ToggleVcsMenu};
|
||||||
use workspace::{FollowNextCollaborator, Workspace, WORKSPACE_DB};
|
use workspace::{FollowNextCollaborator, Workspace, WORKSPACE_DB};
|
||||||
|
|
||||||
const MAX_PROJECT_NAME_LENGTH: usize = 40;
|
const MAX_PROJECT_NAME_LENGTH: usize = 40;
|
||||||
|
@ -37,7 +35,6 @@ actions!(
|
||||||
[
|
[
|
||||||
ToggleContactsMenu,
|
ToggleContactsMenu,
|
||||||
ToggleUserMenu,
|
ToggleUserMenu,
|
||||||
ToggleVcsMenu,
|
|
||||||
ToggleProjectMenu,
|
ToggleProjectMenu,
|
||||||
SwitchBranch,
|
SwitchBranch,
|
||||||
ShareProject,
|
ShareProject,
|
||||||
|
@ -286,7 +283,7 @@ impl CollabTitlebarItem {
|
||||||
.with_tooltip::<BranchPopoverTooltip>(
|
.with_tooltip::<BranchPopoverTooltip>(
|
||||||
0,
|
0,
|
||||||
"Recent branches".into(),
|
"Recent branches".into(),
|
||||||
None,
|
Some(Box::new(ToggleVcsMenu)),
|
||||||
theme.tooltip.clone(),
|
theme.tooltip.clone(),
|
||||||
cx,
|
cx,
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
mod branch_list;
|
|
||||||
mod collab_titlebar_item;
|
mod collab_titlebar_item;
|
||||||
mod contact_finder;
|
mod contact_finder;
|
||||||
mod contact_list;
|
mod contact_list;
|
||||||
|
@ -29,7 +28,7 @@ actions!(
|
||||||
);
|
);
|
||||||
|
|
||||||
pub fn init(app_state: &Arc<AppState>, cx: &mut AppContext) {
|
pub fn init(app_state: &Arc<AppState>, cx: &mut AppContext) {
|
||||||
branch_list::init(cx);
|
vcs_menu::init(cx);
|
||||||
collab_titlebar_item::init(cx);
|
collab_titlebar_item::init(cx);
|
||||||
contact_list::init(cx);
|
contact_list::init(cx);
|
||||||
contact_finder::init(cx);
|
contact_finder::init(cx);
|
||||||
|
|
16
crates/vcs_menu/Cargo.toml
Normal file
16
crates/vcs_menu/Cargo.toml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
[package]
|
||||||
|
name = "vcs_menu"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
publish = false
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
fuzzy = {path = "../fuzzy"}
|
||||||
|
gpui = {path = "../gpui"}
|
||||||
|
picker = {path = "../picker"}
|
||||||
|
util = {path = "../util"}
|
||||||
|
theme = {path = "../theme"}
|
||||||
|
workspace = {path = "../workspace"}
|
||||||
|
|
||||||
|
anyhow.workspace = true
|
|
@ -1,15 +1,17 @@
|
||||||
use anyhow::{anyhow, bail};
|
use anyhow::{anyhow, bail, Result};
|
||||||
use fuzzy::{StringMatch, StringMatchCandidate};
|
use fuzzy::{StringMatch, StringMatchCandidate};
|
||||||
use gpui::{elements::*, AppContext, MouseState, Task, ViewContext, ViewHandle};
|
use gpui::{actions, elements::*, AppContext, MouseState, Task, ViewContext, ViewHandle};
|
||||||
use picker::{Picker, PickerDelegate, PickerEvent};
|
use picker::{Picker, PickerDelegate, PickerEvent};
|
||||||
use std::{ops::Not, sync::Arc};
|
use std::{ops::Not, sync::Arc};
|
||||||
use util::ResultExt;
|
use util::ResultExt;
|
||||||
use workspace::{Toast, Workspace};
|
use workspace::{Toast, Workspace};
|
||||||
|
|
||||||
|
actions!(branches, [OpenRecent]);
|
||||||
|
|
||||||
pub fn init(cx: &mut AppContext) {
|
pub fn init(cx: &mut AppContext) {
|
||||||
Picker::<BranchListDelegate>::init(cx);
|
Picker::<BranchListDelegate>::init(cx);
|
||||||
|
cx.add_async_action(toggle);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type BranchList = Picker<BranchListDelegate>;
|
pub type BranchList = Picker<BranchListDelegate>;
|
||||||
|
|
||||||
pub fn build_branch_list(
|
pub fn build_branch_list(
|
||||||
|
@ -28,6 +30,34 @@ pub fn build_branch_list(
|
||||||
.with_theme(|theme| theme.picker.clone())
|
.with_theme(|theme| theme.picker.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn toggle(
|
||||||
|
_: &mut Workspace,
|
||||||
|
_: &OpenRecent,
|
||||||
|
cx: &mut ViewContext<Workspace>,
|
||||||
|
) -> Option<Task<Result<()>>> {
|
||||||
|
Some(cx.spawn(|workspace, mut cx| async move {
|
||||||
|
workspace.update(&mut cx, |workspace, cx| {
|
||||||
|
workspace.toggle_modal(cx, |_, cx| {
|
||||||
|
let workspace = cx.handle();
|
||||||
|
cx.add_view(|cx| {
|
||||||
|
Picker::new(
|
||||||
|
BranchListDelegate {
|
||||||
|
matches: vec![],
|
||||||
|
workspace,
|
||||||
|
selected_index: 0,
|
||||||
|
last_query: String::default(),
|
||||||
|
},
|
||||||
|
cx,
|
||||||
|
)
|
||||||
|
.with_theme(|theme| theme.picker.clone())
|
||||||
|
.with_max_size(800., 1200.)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
})?;
|
||||||
|
Ok(())
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
pub struct BranchListDelegate {
|
pub struct BranchListDelegate {
|
||||||
matches: Vec<StringMatch>,
|
matches: Vec<StringMatch>,
|
||||||
workspace: ViewHandle<Workspace>,
|
workspace: ViewHandle<Workspace>,
|
Loading…
Add table
Add a link
Reference in a new issue