diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index 078ae81b86..bbac6deca2 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -265,7 +265,7 @@ struct ItemColors { default: Hsla, hover: Hsla, drag_over: Hsla, - marked_active: Hsla, + marked: Hsla, focused: Hsla, } @@ -274,10 +274,10 @@ fn get_item_color(cx: &App) -> ItemColors { ItemColors { default: colors.panel_background, - hover: colors.ghost_element_hover, - drag_over: colors.drop_target_background, - marked_active: colors.element_selected, + hover: colors.element_hover, + marked: colors.element_selected, focused: colors.panel_focused_border, + drag_over: colors.drop_target_background, } } @@ -302,6 +302,9 @@ impl ProjectPanel { this.reveal_entry(project.clone(), *entry_id, true, cx); } } + project::Event::ActiveEntryChanged(None) => { + this.marked_entries.clear(); + } project::Event::RevealInProjectPanel(entry_id) => { this.reveal_entry(project.clone(), *entry_id, false, cx); cx.emit(PanelEvent::Activate); @@ -3546,18 +3549,16 @@ impl ProjectPanel { marked_selections: selections, }; - let bg_color = if is_marked || is_active { - item_colors.marked_active + let bg_color = if is_marked { + item_colors.marked } else { item_colors.default }; - let bg_hover_color = if self.mouse_down || is_marked || is_active { - item_colors.marked_active - } else if !is_active { - item_colors.hover + let bg_hover_color = if is_marked { + item_colors.marked } else { - item_colors.default + item_colors.hover }; let border_color = @@ -4235,16 +4236,11 @@ impl ProjectPanel { let worktree_id = worktree.id(); self.expand_entry(worktree_id, entry_id, cx); self.update_visible_entries(Some((worktree_id, entry_id)), cx); - - if self.marked_entries.len() == 1 - && self - .marked_entries - .first() - .filter(|entry| entry.entry_id == entry_id) - .is_none() - { - self.marked_entries.clear(); - } + self.marked_entries.clear(); + self.marked_entries.insert(SelectedEntry { + worktree_id, + entry_id, + }); self.autoscroll(cx); cx.notify(); } @@ -7333,7 +7329,7 @@ mod tests { select_path(&panel, "root/new", cx); assert_eq!( visible_entries_as_strings(&panel, 0..10, cx), - &["v root", " new <== selected"] + &["v root", " new <== selected <== marked"] ); panel.update_in(cx, |panel, window, cx| panel.rename(&Rename, window, cx)); panel.update_in(cx, |panel, window, cx| { @@ -7767,7 +7763,7 @@ mod tests { " > .git", " v dir_1", " > gitignored_dir", - " file_1.py <== selected", + " file_1.py <== selected <== marked", " file_2.py", " file_3.py", " > dir_2", @@ -7793,7 +7789,7 @@ mod tests { " file_2.py", " file_3.py", " v dir_2", - " file_1.py <== selected", + " file_1.py <== selected <== marked", " file_2.py", " file_3.py", " .gitignore", @@ -7820,7 +7816,7 @@ mod tests { " file_2.py", " file_3.py", " v dir_2", - " file_1.py <== selected", + " file_1.py <== selected <== marked", " file_2.py", " file_3.py", " .gitignore", @@ -7841,7 +7837,7 @@ mod tests { " > .git", " v dir_1", " v gitignored_dir", - " file_a.py <== selected", + " file_a.py <== selected <== marked", " file_b.py", " file_c.py", " file_1.py", @@ -7996,7 +7992,7 @@ mod tests { " > .git", " v dir_1", " > gitignored_dir", - " file_1.py <== selected", + " file_1.py <== selected <== marked", " file_2.py", " file_3.py", " > dir_2", @@ -8022,7 +8018,7 @@ mod tests { " file_2.py", " file_3.py", " v dir_2", - " file_1.py <== selected", + " file_1.py <== selected <== marked", " file_2.py", " file_3.py", " .gitignore", @@ -8043,7 +8039,7 @@ mod tests { " > .git", " v dir_1", " v gitignored_dir", - " file_a.py <== selected", + " file_a.py <== selected <== marked", " file_b.py", " file_c.py", " file_1.py",