fix: retain selections and float local review editors
This commit is contained in:
+44
-15
@@ -22,6 +22,24 @@ impl Editor {
|
||||
.map(|buffer| buffer.title.as_str())
|
||||
}
|
||||
|
||||
pub fn review_panel(&self) -> Option<usize> {
|
||||
self.review_pane
|
||||
.filter(|pane| *pane == self.pane_id && self.workspace_diff().is_some())
|
||||
}
|
||||
|
||||
pub(super) fn dismiss_review_panel(&mut self) -> bool {
|
||||
let Some(panel) = self.review_panel() else {
|
||||
return false;
|
||||
};
|
||||
let source = self.panes[&panel]
|
||||
.origin
|
||||
.expect("review panel has a source pane");
|
||||
self.finish_pane_interaction();
|
||||
self.select_pane(source);
|
||||
self.bind_diff_buffer();
|
||||
true
|
||||
}
|
||||
|
||||
fn review_diff_mut(&mut self) -> Option<&mut DiffState> {
|
||||
self.diff.as_mut().or(self.parked_diff.as_mut())
|
||||
}
|
||||
@@ -546,22 +564,24 @@ impl Editor {
|
||||
.is_some_and(|binding| binding.owner == self.tab_id && binding.kind == kind)
|
||||
})
|
||||
.map(|buffer| buffer.id);
|
||||
let panel = self.panes.iter().find_map(|(id, pane)| {
|
||||
(self.pane_layout.contains(*id)
|
||||
&& self.buffer(pane.buffer_id).is_some_and(|buffer| {
|
||||
buffer
|
||||
.review_buffer
|
||||
.as_ref()
|
||||
.is_some_and(|binding| binding.owner == self.tab_id)
|
||||
}))
|
||||
.then_some(*id)
|
||||
});
|
||||
if let Some(panel) = panel {
|
||||
self.select_pane(panel);
|
||||
let panel = if let Some(panel) = self.review_pane {
|
||||
panel
|
||||
} else {
|
||||
self.select_pane(self.diff_owner.unwrap());
|
||||
self.split_pane(SplitAxis::Vertical);
|
||||
}
|
||||
let id = self.next_pane_id;
|
||||
self.next_pane_id += 1;
|
||||
self.panes.insert(
|
||||
id,
|
||||
Pane {
|
||||
buffer_id: self.active.id,
|
||||
origin: self.diff_owner,
|
||||
views: BTreeMap::from([(self.active.id, self.active.view.inherit())]),
|
||||
},
|
||||
);
|
||||
self.review_pane = Some(id);
|
||||
id
|
||||
};
|
||||
self.panes.get_mut(&panel).unwrap().origin = self.diff_owner;
|
||||
self.select_pane(panel);
|
||||
if let Some(id) = existing {
|
||||
self.switch_buffer(id);
|
||||
if kind == ReviewText::Overview {
|
||||
@@ -586,6 +606,15 @@ impl Editor {
|
||||
}
|
||||
|
||||
pub(super) fn handle_review_overview(&mut self, input: &Input) -> bool {
|
||||
if *input == Input::Escape
|
||||
&& self.active.view.mode == Mode::Normal
|
||||
&& self.palette.is_none()
|
||||
&& self.sequence_pending().is_none()
|
||||
&& self.count.is_none()
|
||||
&& self.dismiss_review_panel()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if *input == Input::Enter
|
||||
&& self.active.view.mode == Mode::Normal
|
||||
&& self.palette.is_none()
|
||||
|
||||
Reference in New Issue
Block a user